在RAC 3+中使用combineLatest和UITextFields

时间:2015-10-16 15:39:02

标签: swift uitextfield reactive-cocoa-3

我想简单地"结合"由许多文本字段发出的信号并触发一段代码。这似乎有几种方式"应该"使用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()

1 个答案:

答案 0 :(得分:1)

可以在不进行转换的情况下观察rac_textSignal,我们只需要澄清rac_textSignal is RACSignal。 RACSignal是ReactiveCocoa 2.0信号,与Objective-C版本相关。因此,您需要将RAC2运算符应用于此类信号,combineLatestWith:可以帮助您解决此类任务。

由于RAC3中基本概念的差异,应用Swift运算符需要进行转换。在RAC2中,此类核心实体为RACSignal,而RAC3中为SignalSignalProducer