私は RxSwift に足を踏み入れており、通常の API 呼び出しの 1 つに「ストリーミング API」を作成したいと考えています。
私の考えは、通常の呼び出し(すでに何の問題もなくオブザーバブルを使用しています)を取り、タイマーにそのような呼び出しを起動させ、同じオブザーバブルで結果を送信することです。これにより、View Controllerは自動的に更新できるため、これを行う代わりに(疑似コードが続きます) :
func getLocations() -> Observable<[Location]> {
return Observable<[Location]>.create {
sink in
NSURLSession.sharedSession.rx_JSON(API.locationsRequest).map {
json in
return json.flatMap { Location($0) }
}
}
}
私はこれが起こることを望みます(疑似コードが続きます):
func getLocations(interval: NSTimeInterval) -> Observable<[Location]> {
return Observable<[Location]>.create {
sink in
NSTimer(interval) {
NSURLSession.sharedSession.rx_JSON(API.locationsRequest).map {
json in
sink.onNext(json.flatMap { Location($0) })
}
}
}
}
最後に試みたのは NSTimer をミックスに追加することでしたが、シンクへの参照を取得し、それをタイマーによって呼び出されるメソッドに渡して実際にイベントをパイプに送信する方法がわかりません。タイマーのハンドラは、スタンドアロン メソッド上にある必要があります。BlocksKit のブロック タイマー拡張機能を投入しようとしましたが、タイマーは指定された間隔で起動されるのではなく、1 秒ごとに起動され、目的を達成できませんでした。
オペレーターについても読みましたInterval
が、それが正しい方法かどうかはわかりません。
これを正しく行う方法についての指針はありますか?
最終的な目標は、前の呼び出しが終了した後 (成功または失敗) にのみタイマーを再始動させることです。