ストリームパイプライン
ストリームは|>
ストリームパイプラインオペレータとストリームの操作を使用して構成することができます。
例えば、searchTextStream
を使用して非常に一般的なインクリメンタルサーチの手法は次のようになります。
let searchResultsStream: Stream<[Result]> = searchTextStream
|> debounce(0.3)
|> distinctUntilChanged
|> map { text -> Stream<[Result]> in
return API.getSearchResultsStream(text)
}
|> switchLatestInner
をいくつかのシナリオがあります(例えばrepeat()
)あなたは、複製可能Stream<T>.Producer
(Void -> Stream<T>
)ではなく、プレーンStream<T>
を使用したいとき。この場合、代わりに|>>
streamProducer-pipelining演算子を使用できます。
// first, wrap stream with closure
let timerProducer: Void -> Stream<Int> = {
return createTimerStream(interval: 1)
|> map { ... }
|> filter { ... }
}
// then, use `|>>` (streamProducer-pipelining operator)
let repeatTimerProducer = timerProducer |>> repeat(3)
しかし、あなたはまた、(@autoclosureのおかげで)だけでなく、ストリーム&ストリーム操作の
|>>
演算子を使用することができますので、上記の場合には、閉鎖を包むことは、常に、厄介になります。
let repeatTimerProducer = createTimerStream(interval: 1)
|>> map { ... }
|>> filter { ... }
|>> repeat(3)
このコードはどこですか?あなたは、+や - のような演算子になりたいものは何でも定義できますか?私はそれがちょうど2つのカスタム演算子だと思います。 – luk2302
https://github.com/kickstarter/ios-oss/blob/master/Kickstarter-iOS/Tests/Views/ActivitiesViewControllerTests.swift – Christopher
ほとんどの場合と同様に、オペレータはコマンドをクリックして宣言を表示できます。 – Alexander