2017-02-18 10 views
0

私はSwift 3に書き込まなかったSwift 2.2アプリを移行しようとしています.RACコールがいくつか実行されるまで、すべてうまくいっていました。私はReactiveCocoaに慣れていないので、これはさらに困難です。Swift 3のrac_textSignal

/** 
* Method name: Enable Login Button 
* Description: Enable or disable login button based on 
* username and password entry 
* Parameters: None 
*/ 
func enableLoginButton() -> Void { 
    self.btnLogin.isEnabled = false 

    let serviceUrlSignal = self.txtServiceUrl.rac_textSignal() 
     .toSignalAssumingHot() 
     .assumeNoErrors() 
     .map { text in text as! String } 

    let usernameSignal = self.txtFieldUsername.rac_textSignal() 
     .toSignalAssumingHot() 
     .assumeNoErrors() 
     .map { text in text as! String } 

    let userNameCharSignal = usernameSignal.map { $0.characters.count } 

    let passwordSignal = self.txtFieldPassword.rac_textSignal() 
     .toSignalAssumingHot() 
     .assumeNoErrors() 
     .map { text in text as! String } 

    let passwordCharSignal = passwordSignal.map { $0.characters.count } 

    userNameCharSignal.combineLatestWith(passwordCharSignal) 
     .map 
     { 
      charArray in charArray.0 > 0 && charArray.1 > 0 
     } 
     .observe { event in 
      if let buttonEnabled = event.value { 
       self.btnLogin.enabled = buttonEnabled 
      } 
    } 

    viewModel.username <~ usernameSignal 
    viewModel.password <~ passwordSignal 
    viewModel.serviceUrl <~ serviceUrlSignal 

    btnLogin.rac_signalForControlEvents(.TouchUpInside) 
     .subscribeNext{ 
      button in 
      print("Authenticate Click!") 
    } 
} 

私が理解するところでは、rac_textSignalはReactiveSwiftには存在しません。 ReactiveObjCをインストールする必要がありますか、またはこの機能を置き換えるために使用できる迅速なアプローチはありますか?ありがとう。

+0

let usernameSignal = self.txtFieldUsername.rac_textSignal() .toSignalAssumingHot() .assumeNoErrors() .map { text in text as! String } ... viewModel.username <~ usernameSignal 

のチャンク全体を置き換えることができますhttps://でgithubの.com/ReactiveCocoa/ReactiveCocoa/issues/3197 – Pierce

答えて

1

ReactiveSwiftに加えてReactiveCocoaを追加する必要があります。

ReactiveCocoaのコアはReactiveSwiftに実装されましたが、ReactiveCocoaは必要なUIKitバインディングのようなCocoa固有のものを追加します。

UIKitバインディングにはreactiveプロパティ(例: textfield.reactive.continuousTextValues

rac_textSignalではなく)これらのバインディングは既に正しく入力されているので

は、あなたが私はこれが役立つと思う

viewModel.username <~ self.txtFieldUsername.reactive.continuousTextValues