iOS RxSwift-如何“断开”可观察对象?

时间:2018-09-16 12:01:14

标签: ios swift observable rx-swift

我正在构建一个聚合器类,该类将多个可观察对象连接起来,并从这些可观察对象中发出单个发射序列:

有5个输入源输入,其中1个输入来自ReplaySubject

是否可以在此聚合器中管理订阅,以允许其中一个来源“断开连接”而不会破坏整个链条?

能否保留[Observable: Subscription]的词典来帮助取消特定的订阅?

1 个答案:

答案 0 :(得分:1)

听起来像https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/dataset-datatable-dataview/copying-dataset-contents(如下所示)可能会让您受益。

您的商店已绑定到您的输入源。 (如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)
    }
}