LoginSignup
6
6

More than 5 years have passed since last update.

ReactiveCocoa 3.0でSignalProducerをマージ

Last updated at Posted at 2015-08-13

まえおき

環境: Xcode6.4, ReactiveCocoa 3.0RC1

複数のSignalProducerをマージする方法。
ドキュメントにやり方は書いてありますが、いちいちSignalProducerSignalProducerを作って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.usernameself.passwordMutableProperty<String>です

6
6
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
6