まえおき
環境: Xcode6.4, ReactiveCocoa 3.0RC1
複数のSignalProducer
をマージする方法。
ドキュメントにやり方は書いてありますが、いちいちSignalProducer
のSignalProducer
を作ってflatten
するのが面倒くさい感じです…
それっぽい関数が見つからなかったので自分で書いちゃいました。
(ただ自分が見落としてるだけで実はあるのかも知れません)修正: 簡単な方法ありました
定義
修正: これ↓だけでいいらしいです
func merge<T, E>(sources: SignalProducer<T, E>...) -> SignalProducer<T, E> {
return SignalProducer(values: sources) |> flatten(.Merge)
}
func mergeWith<T, E>(other: SignalProducer<T, E>) -> SignalProducer<T, E> -> SignalProducer<T, E> {
return { SignalProducer(values: [$0, other]) |> flatten(.Merge) }
}
使い方
merge(
self.username.producer,
self.password.producer
).start(next: { text in
println("\(text)")
})
self.username.producer
|> mergeWith(self.password.producer)
|> start(next: { text in
println("\(text)")
})
注) self.username
、self.password
はMutableProperty<String>
です