2015-10-16 27 views
1

我想簡單地「組合」由多個文本字段發出的信號並激發一段代碼。似乎這種「應該」使用combineLatest()或SignalProducer初始化程序等方法工作的方法有幾種。但我無法獲得任何預期的編譯或功能。在RAC 3+中使用combineLatest和UITextFields

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

觀察rac_textSignal沒有轉換是可能的,我們只需要澄清一下rac_textSignal is RACSignal。 RACSignal是ReactiveCocoa 2.0信號,與Objective-C版本相關。因此,您需要將RAC2運營商應用於此類信號,combineLatestWith:可以幫助您解決此類任務。

由於RAC3中基本概念的差異,轉換對應用Swift運算符是必需的。在RAC2中,這樣的核心實體是RACSignal,針對RAC3中的SignalSignalProducer

+1

啊,我沒有意識到RAC2的結構仍然在RAC3中。這就說得通了。有沒有一種合適的方法可以使用RAC3的'Signal'和'SignalProducer'完成相同的功能?或者需要創建擴展來從文本字段獲取'Signal',而不是'RACSignal'? –

+0

@MichaelBopp,早期RAC 3.0版本將沒有UIKit擴展(更多關於這裏https://github.com/ReactiveCocoa/ReactiveCocoa/issues/2074)。您可以嘗試搜索建立在ReactiveCocoa頂部的RAC Extensions框架,其中之一 - https://github.com/neilpa/Rex – skyylex