我想简单地"结合"由许多文本字段发出的信号并触发一段代码。这似乎有几种方式"应该"使用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
本身。这个"编译"但除非创建并启动了制作人,否则似乎没有任何信号发送。
这个问题/答案ReactiveCocoa combine SignalProducers into one也有效,但似乎仍然是一种解决方法,并不能解释为什么需要创建信号生成器而不是观察原始的rac_textSignal()
答案 0 :(得分:1)
可以在不进行转换的情况下观察rac_textSignal
,我们只需要澄清rac_textSignal
is RACSignal
。 RACSignal是ReactiveCocoa 2.0信号,与Objective-C版本相关。因此,您需要将RAC2运算符应用于此类信号,combineLatestWith:
可以帮助您解决此类任务。
由于RAC3中基本概念的差异,应用Swift运算符需要进行转换。在RAC2中,此类核心实体为RACSignal
,而RAC3中为Signal
和SignalProducer
。