2

RxSwift を使用してイベント エミッターを実装するにはどうすればよいですか? (サブスクライブしている他のオブジェクトによって消費されるデータを発行できるオブジェクト。)

Rx のドキュメントと例を読んだ後、私は完全な馬鹿のように感じ、Observer から Observable に手動でイベントを発行する方法についてまだ非常に混乱しています。そのObservableにサブスクライブしているすべてのObserverにデータを含むイベントを発行できるObservableがあることを理解しています。ただし、これが実際に Swift でどのように実装されているかについてはまったくわかりません。

私が実装しようとしているものの例を次に示します。

class VendingMachine {

    let dispenser = Observable<Drink>

    // Notify all subscribed Observers that this machine dispensed a drink.
    func dispenseDrink(item: Drink) {
        dispenser.onNext(item)
    }

}

そして2番目のファイル:

class MachineReporter: Observer {

    let dispenser = VendingMachine().dispenser

    init() {
        dispenser.subscribe(self)
    }

    onNext { drink in
        print("Vending machine dispensed a drink: \(drink)"
    }

}

私の脳は揚げられています。これがどのように機能するかを明らかに誤解しているため、今のところ EmitterKit のような特殊なライブラリに切り替えるだけです。

しかし、Rx がどのように機能するかを理解する必要があります。ヘルプ!

4

2 に答える 2

4

私はあなたが で何をしようとしているのかについてかなり混乱しているMachineReporterので、あまり役に立たないかもしれませんが、私のコードはそれを機能させることだけに取り組んでいます。

RxSwift Playgroundの例を見て、それらに慣れていることを確認することを強くお勧めします。特にあなたの質問はSubjectsを扱います。そうすれば、不快感と欲求不満の最初の「こぶ」を乗り越えることができます。それについては確かに耳にしますが、それは別の考え方ですが、その最初のハードルを乗り越えることは完全に価値があります. それにこだわります。

class VendingMachine {

    let dispenser = PublishSubject<Drink>()

    func dispenseDrink(item: Drink) {
        dispenser.onNext(item)
    }
}

class MachineReporter {

    let disposeBag = DisposeBag()
    let dispenser = VendingMachine().dispenser

    init() {
        dispenser.asObservable()
            .subscribeNext { drink in
                print("Vending machine dispensed a drink: \(drink)")
            }
            .addDisposableTo(disposeBag)
    }
}
于 2016-05-03T08:23:55.760 に答える