2015-04-08 134 views
0

我試圖在我的PasswordResetViewController上使用RACCommand。在我viewDidLoad我有以下幾點:RACCommand混淆

sendButtonItem = UIBarButtonItem(title: "Reset Password", style: .Done, target: self, action: nil) 

var emailIsValid = textField.rac_textSignal().map { text -> AnyObject! in 
    return count((text as! String)) > 0 
} 

let passwordResetSignal = RACSignal.createSignal { (subscriber) -> RACDisposable! in 
    User.requestPasswordResetForEmailInBackground(self.textField.text) { success, error in 
     if success { 
      subscriber.sendNext(success) 
      subscriber.sendCompleted() 
     } else { 
      subscriber.sendError(error) 
     } 
    } 

    return nil 
} 

sendButtonItem.rac_command = RACCommand(enabled: emailIsValid) { (input) in 
    return passwordResetSignal 
} 

sendButtonItem.rac_command.executionSignals.subscribeError { (error) -> Void in 
    println("ERROR!") 
} 

sendButtonItem.rac_command.executionSignals.subscribeNext { (success) -> Void in 
    println("SUCCESS!") 
} 

navigationItem.rightBarButtonItem = sendButtonItem 

rightBarButtonItem啓用/禁用如我所料,但我沒有得到任何未來或錯誤事件。

回答

1

executionSignals是信號的信號。換句話說:每次執行該命令時,它都會發送命令信號(在您的情況下,爲passwordResetSignal)作爲其下一個值。

如果您想訂閱來自passwordResetSignal發送的值,使用switchToLatest

sendButtonItem.rac_command.executionSignals.switchToLatest().subscribeNext { (success) -> Void in 
    println("SUCCESS!") 
} 

有哪些可以用來訂閱從執行信號(注意,收到錯誤單獨的信號errorsRACCommand:在錯誤發送爲next值):

sendButtonItem.rac_command.errors.subscribeNext { (error) -> Void in 
    println("ERROR!") 
} 
+0

感謝您的解釋! –