[iOS開發生手筆記] 初試ReactiveCocoa

Reading time ~1 minute

對FRP跟Swift還沒很熟, 直接玩ReactiveCocoa 有點苦手, 不過, 還挺好玩的

狀況設計: 畫面上有一個輸入框, 和一個文字標籤, 在輸入框輸入文字後, 標籤要同步顯示一樣的文字, 文字框輸入不滿三個字母時背景要顯示紅色,像這樣:

所以會有一個標籤(myLabel)和一個輸入框(myInput):

    @IBOutlet weak var myLabel: UILabel!
    @IBOutlet weak var myInput: UITextField!

要做到這樣的功能, 不只有一種作法, 像是也可以用KVO去observe一個變數由那個來改變myLabel的值,但KVO的缺點是, 被observe的那個必須是dynamic的, 所以沒辦法直接observer myInput.text

但用ReactiveCocoa來做的話就簡單的有趣, 首先如果要達到第一個需求, 只需要

    var text_signal = myInput.rac_textSignal()
    text_signal.setKeyPath("text", onObject: myLabel)

這還真是么壽簡單, 只是把myInput.text跟myLabel.text抓條線連一起就好了!

那第二項呢?


text_signal.map({
  (textObj:AnyObject!)->AnyObject in
    var text = textObj as! String
    return count(text) < 3 ? UIColor.redColor():UIColor.whiteColor()
}).setKeyPath("backgroundColor", onObject: myInput)

這也是簡單的不行, 把輸入的Signal用map轉換成UIColor, 而轉換的條件就是以text的長度來計算, 最後連到myInput.backgroundColor去, 挺有趣的(雖然也不是很好懂)