Swiftでストリームを扱うライブラリを書いた
FRPの記事をいくつか見てあまり理解できなかったので、Swiftでストリームを扱うライブラリを書いてみた。結論から言うと、まだストリームについて深く理解できていない感じがするので「FRPとは何か」「ストリームとは何か」といった話はしない。そういう話は他のエントリーを読んでほしいと思う。
demo
let stream = Stream<String>() let counterStream: Stream<Int> = stream.map({ message in return countElements(message) }).scan(0, { previousMessage, message in return previousMessage + message }).subscribe({ message in println(message) }) stream.publish("Hello, ") //=> 7 stream.publish("wor") //=> 10 stream.publish("ld!") //=> 13
機能
- ストリームに
subscribe
で関数を渡すと、publish
されたときにその関数がpublish
の引数が渡されて実行される。subscribe
は失敗時と完了時に実行する関数を指定することもできる。ストリームに失敗を通知するのはpublish
の代わりにfail
、完了を通知するのはcomplete
。 - その他FRPのライブラリで実装されている次のような基本的なストリーム操作を実装した:
map
,filter
,scan
,flatMap
,throttle
,debounce
,buffer
,merge