web-dev-qa-db-ja.com

RxSwiftでイベントを手動で発行する

私はRxSwiftの初心者であり、非常に基本的な助けが必要です。
私はObservableを持っていると仮定し、このようにサブスクライブします。

_ let source: Observable<Void> = Observable.create { [weak self] observer in

        guard let _ = self else {
            observer.on(.Completed)
            return NopDisposable.instance
        }

        observer.on(.Next())

        return AnonymousDisposable {

        }
    }
_

そして、このようなサブスクライブ:

_ source.subscribeNext { () -> Void in

    }
_

問題は、必要なときに毎回、手動でsubscribeNextのイベントを発行して手動で行う方法です。これは、UIButtonでの_rx_tap_の動作に似ています。
コード例では、次のようなものが表示されますsource = button.rx_tap.asObservale()。その後、ユーザーがボタンをタップするたびに、イベントが発行され、subscribeNext()でトリガーされます。また、UIイベントからではなく、プログラムでその動作を実現したいと考えています。

15
dummy307

ほとんどの場合、あなたはあなたのオブザーバブルを構成することができ、私がこれから提供しようとしているソリューションはRxコードを実行するための推奨される方法ではありません。

Subject を見て、要求した動作を実装できます。サブジェクトには複数のバリエーションがあり、ドキュメントで十分に説明されています。

RxSwiftの playground からヒントを得た使用例:

let subject = PublishSubject<String>()

_ = subject.subscribeNext { content in
    print(content)
}
subject.on(.Next("a"))
subject.on(.Next("b"))

これは"a"、次に"b"

件名を使用するかどうかの詳細については、 この記事 をお勧めします。

16
tomahh

ドライバーにとっては、

var isSearching: Driver<Bool>

isSearching = Driver.just(true)
0
Maria