在 RAC 3+ 中将 combineLatest 与 UITextFields 结合使用
Using combineLatest with UITextFields in RAC 3+
我想简单地 "combine" 一些文本字段发出的信号并触发一段代码。 "should" 似乎有几种方法可以使用 combineLatest()
或 values:
SignalProducer 初始值设定项等方法。但是我无法按预期编译或运行任何东西。
RAC 文档使用以下示例
combineLatest(numbersSignal, lettersSignal)
|> observe(next: println, completed: { println("Completed") })
但是我无法编译这种用法
我可以使用冗余块执行以下操作...
locationTextfield.rac_textSignal().toSignalProducer()
|> start(next: { txt in
println(txt)
})
aircraftTextfield.rac_textSignal().toSignalProducer()
|> start(next: { txt in
println(txt)
})
我也不明白为什么我需要使用 toSignalProducer()
并开始而不是仅仅观察 rac_textsignal
本身。这 "compiles" 但除非创建并启动生产者,否则信号似乎没有发送任何内容。
这个 question/answer 也有效,但似乎仍然是一种解决方法,并且没有解释为什么需要创建信号生成器而不是观察原始 rac_textSignal()
s
观察 rac_textSignal
无需转换是可能的,我们只需要澄清一下 rac_textSignal
is RACSignal
。 RACSignal 是 ReactiveCocoa 2.0 信号,与 Objective-C 版本相关。因此,您需要将 RAC2 运算符应用于此类信号,combineLatestWith:
可以帮助您解决此类任务。
由于 RAC3 中基本概念的差异,需要进行转换才能应用 Swift 运算符。在 RAC2 中,这样的核心实体是 RACSignal
,与 RAC3 中的 Signal
和 SignalProducer
相对。
我想简单地 "combine" 一些文本字段发出的信号并触发一段代码。 "should" 似乎有几种方法可以使用 combineLatest()
或 values:
SignalProducer 初始值设定项等方法。但是我无法按预期编译或运行任何东西。
RAC 文档使用以下示例
combineLatest(numbersSignal, lettersSignal)
|> observe(next: println, completed: { println("Completed") })
但是我无法编译这种用法
我可以使用冗余块执行以下操作...
locationTextfield.rac_textSignal().toSignalProducer()
|> start(next: { txt in
println(txt)
})
aircraftTextfield.rac_textSignal().toSignalProducer()
|> start(next: { txt in
println(txt)
})
我也不明白为什么我需要使用 toSignalProducer()
并开始而不是仅仅观察 rac_textsignal
本身。这 "compiles" 但除非创建并启动生产者,否则信号似乎没有发送任何内容。
这个 question/answer rac_textSignal()
s
观察 rac_textSignal
无需转换是可能的,我们只需要澄清一下 rac_textSignal
is RACSignal
。 RACSignal 是 ReactiveCocoa 2.0 信号,与 Objective-C 版本相关。因此,您需要将 RAC2 运算符应用于此类信号,combineLatestWith:
可以帮助您解决此类任务。
由于 RAC3 中基本概念的差异,需要进行转换才能应用 Swift 运算符。在 RAC2 中,这样的核心实体是 RACSignal
,与 RAC3 中的 Signal
和 SignalProducer
相对。