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