2015-11-02 78 views
4

爲了更好地瞭解如何在MVVM體系結構中使用它,我在一個儘可能基本的iOS應用程序(Swift)中實現了ReactiveCocoa 4 。我的問題是:如何從視圖直到模型獲取UITextField的textSignal?將信號從視圖傳遞到MVVM中使用ReactiveCocoa 4

什麼我已經在這裏工作了,但感覺這樣只有50%的反應性(而不是太漂亮在任何情況下):

VIEW(在viewDidLoad中)

originalTextField.rac_textSignal().subscribeNext{ 
    (next:AnyObject!) ->() in 
    let text = next as! String 
    self.viewModel?.originalText=text 
} 

視圖模型

var originalText:String?{ 
    didSet{self.model.originalText=originalText} 
} 

模型

var originalText:String?{ 
    didSet{//Do model stuff} 
} 

回答

0

這就是我目前如何實現這一行爲,我對RAC也相當陌生,所以把它與一粒鹽。

我使用ReactiveCocoa 4.1.0 & Rex 0.10.0


視圖模型

  1. 設置一個MutablePropertyoriginalText

易變的性質有一個producer屬性,你會從綁定到您的視圖。

隨着該綁定,調用originalText.producer.startWithNext將創建一個信號,並添加1個觀察者這樣你就可以在您的視圖模型

let originalText: MutableProperty<String> = MutableProperty("") 

    func observeTextField(){ 
     originalText.producer.startWithNext { (str) in 
      self.model.originalText = str 
     } 
    } 

查看內收到值:

添加Rex作爲依賴項並導入它。您將使用Rex的ignoreError來處理類型衝突。

SignalProducer定義爲SignalProducer<T, ErrorType>因此您必須刪除ErrorType以匹配MutableProperty<String>

  1. 從文本框
  2. 創建一個信號產生器忽略對信號產生
  3. 綁定的信號產生你的視圖模型的MutableProperty
  4. 呼叫ViewModel.observeTextField從視圖步驟3
  5. 後綁定錯誤

中綴<~運算符將生產者綁定到您的ViewModel的MutableProperty

import Rex 

...

let textFieldProducer = (originalTextField.rac_textSignal() 
     .toSignalProducer() 
     .map {text in text as! String} 
     .ignoreError())! 

    viewModelInstance.originalText <~ textFieldProducer 

我希望這可以幫助你。

相關問題