iOS RxSwift - 如何“断开”一个 observable?
Posted
技术标签:
【中文标题】iOS RxSwift - 如何“断开”一个 observable?【英文标题】:iOS RxSwift - how to “disconnect” an observable? 【发布时间】:2018-09-16 12:01:13 【问题描述】:我正在构建一个聚合器类,它连接多个可观察对象并从这些可观察对象发出单个发射序列:
来自源的 5 个输入进入,一个来自ReplaySubject
的输入。
有没有办法在这个聚合器中管理订阅,以允许其中一个来源“断开”而不破坏整个链?
保留[Observable: Subscription
] 的字典是否有助于取消特定订阅?
【问题讨论】:
这个问题太模糊了。你能发布一些代码来展示这些订阅是如何组合的吗? 一个主题可以通过手动调用'dispose'来终止。 【参考方案1】:听起来您可能会从Store object 之类的东西中受益(转载如下。)
您的商店与您的输入源绑定。 (如myInput.bind(to: myStore).disposed(by: bag)
)并且输出绑定到商店的状态。 (如myStore.state.bind(to: myOutput).disposed(by: bag)
)
输入可以通过完成断开连接,输出可以通过处理相关的一次性用品断开连接。
reducer 的工作是将输入转换为输出。
//
// Store.swift
//
// Created by Daniel Tartaglia on 3/11/17.
// Copyright © 2017 Haneke Design. MIT License
//
import Foundation
import RxSwift
class Store<State, Action>
init(initialState: State, reducer: @escaping (State, Action) -> State)
state = actions
.scan(initialState, accumulator: reducer)
.startWith(initialState)
.share(replay: 1)
let state: Observable<State>
private let actions = PublishSubject<Action>()
extension Store: ObserverType
typealias E = Action
func on(_ event: Event<E>)
actions.on(event)
【讨论】:
以上是关于iOS RxSwift - 如何“断开”一个 observable?的主要内容,如果未能解决你的问题,请参考以下文章
如何将 RxSwift 用于 Objective-C 和 Swift 项目?
如何将 RxSwift 的 Single 转换为 Observable 并忽略“完成”事件?