2015-04-08 132 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

感谢您的解释! –