1

我想简单地“组合”多个文本字段发出的信号并触发一段代码。似乎有几种方法“应该”使用诸如SignalProducer 初始化程序之类combineLatest()的方法来工作。values:但我无法按预期编译或运行任何东西。

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 将 SignalProducers 组合成一个也可以,但似乎仍然是一种解决方法,并且没有解释为什么需要创建信号生产者而不是观察原始rac_textSignal()s

4

1 回答 1

1

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

由于 RAC3 中的基本概念存在差异,因此必须进行转换才能应用 Swift 运算符。在 RAC2 中,这样的核心实体是RACSignal、反对SignalSignalProducer在 RAC3 中。

于 2015-10-17T10:59:51.683 回答