swift - 在 RAC 3+ 中将 combineLatest 与 UITextFields 结合使用

标签 swift uitextfield reactive-cocoa-3

我想简单地“组合”由多个文本字段发出的信号并触发一段代码。似乎有几种方法可以使用 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 中的 SignalSignalProducer

关于swift - 在 RAC 3+ 中将 combineLatest 与 UITextFields 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33174425/

相关文章:

ios - Swift - 每日本地事件通知

ios - Move view up only if certain textField is selected

ios - 始终(强制)输入小写或大写 - iOS swift

ios - 如何制作有限制的 UITextField

ios - 没有位置坐标没有互联网与显着位置监控

iOS Catalyst Cocoapod 框架错误 - 签名需要开发团队

ios - 将 Dictionary 转换为 AnyObject 时出现编译器错误?

ios - ReactiveCocoa 将 SignalProducers 合二为一

swift - ReactiveCocoa 与 RxSwift - 优缺点?

swift - Reactivecocoa 3.0 Release Candidate 1 With Project targeting iOS 7