2

ReactiveCocoa 4 を使用して検索テキストフィールドを実装しており、テキストが X 時間入力されなかった場合にのみ検索 API をヒットしたいと考えています。以前にスケジュールされたものをキャンセルし、textDidChange デリゲート メソッドで「executeSearch」セレクターを起動することで、以前にこれを行いました。これにより、入力するたびに、以前にスケジュールされた「executeSearch」セレクターがキャンセルされ、新しいセレクターが X 秒で起動するようにスケジュールされます。

これと同じ動作をしたいのですが、入力テキストにバインドされたシグナルプロデューサーからです。私の現在の実装は近いですが、同じではありません。この動作は、前のイベントをキャンセルするのではなく、テキスト入力イベントを 0.5 秒ごとに発生するように調整するだけです。

searchTextInput.producer.delay(0.3, onScheduler: RACScheduler.currentScheduler())
                        .throttle(0.5, onScheduler: RACScheduler.currentScheduler())
                        .producer.startWithNext({ [unowned self] searchText in
                           self.executeSearch(searchText)
                        })

ReactiveCocoa 4 のドキュメントを調べて、どのシグナル関数を使用すべきかを判断するのに苦労しています! ありがとうございました!

4

1 に答える 1

3

DateSchedulerType を使用する必要があります。例えば:

textField.rac_textSignal()
            .toSignalProducer()
            .map { $0 as! String }
            .flatMapError { _ in SignalProducer<String, NoError>.empty }
            .throttle(2.0, onScheduler: QueueScheduler.mainQueueScheduler)
            .filter { $0.isEmpty }
            .startWithNext { text in
                print("t: \(text)")
        }

また、executeSearch を SignalProducer として記述し、flatMap(.Latest) を使用してシグナル チェーンを作成することもできます。

また、UI に結果を取得するために mainQueueSheduler を使用することを忘れないでください。

于 2016-08-26T02:41:24.290 に答える