iOS RxSwift - как «отключить» наблюдаемое? - PullRequest
0 голосов
/ 16 сентября 2018

Я строю класс агрегатора, который соединяет несколько наблюдаемых и испускает одну последовательность излучений от этих наблюдаемых:

5 входных сигналов от источников поступают, один входной сигнал поступает от ReplaySubject.

Есть ли способ управлять подписками в этом агрегаторе, чтобы один из источников мог "отключиться", не разрывая всю цепочку?

Сохранял бы словарь [Observable: Subscription] помогите отменить определенную подписку?

1 Ответ

0 голосов
/ 16 сентября 2018

Звучит так, будто вам может пригодиться что-то вроде Store store (воспроизведено ниже.)

Ваш магазин привязан к вашим источникам входных данных.(как в myInput.bind(to: myStore).disposed(by: bag)) и выходы привязаны к состоянию магазина.(как в myStore.state.bind(to: myOutput).disposed(by: bag))

Входы могут отключаться при завершении, а выходы могут отключаться при утилизации связанных одноразовых.

Работа редуктора заключается в преобразовании входа в выход.

//
//  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)
    }
}
...