swift ReactiveCocoa 组合最新
swift ReactiveCocoa combineLatest
在obj-c中,我可以使用这个方法:
RACSignal *signUpActiveSignal = [RACSignal combineLatest:@[validUsernameSignal, validPasswordSignal]
reduce:^id(NSNumber*usernameValid, NSNumber *passwordValid){
return @([usernameValid boolValue]&&[passwordValid boolValue]);
}];
当我将它翻译成 swift 时,像这样:
RACSignal.combineLatest([accountSignal, passwordSignal]) { () -> AnyObject! in
// arguments
return true
}.subscribeNext { (reduceResult: AnyObject!) -> Void in
KMLog("\(reduceResult)")
}
如何获取参数
我一直无法弄清楚如何将闭包用于 combineLatest
,但是您可以 使用 map
。输入是一个 RACTuple
对象。您可以像这样从输入信号中获取对象:
RACSignal.combineLatest([accountSignal, passwordSignal]).map {
let tuple = [=10=] as! RACTuple
let account = tuple.first as! String
let password = tuple.second as! String
// your code here
}
显然您会希望将您的对象转换为它们的实际类型,但我只是在此处使用字符串作为示例。请记住,您必须 return 在 map
闭包末尾合并对象。
在obj-c中,我可以使用这个方法:
RACSignal *signUpActiveSignal = [RACSignal combineLatest:@[validUsernameSignal, validPasswordSignal]
reduce:^id(NSNumber*usernameValid, NSNumber *passwordValid){
return @([usernameValid boolValue]&&[passwordValid boolValue]);
}];
当我将它翻译成 swift 时,像这样:
RACSignal.combineLatest([accountSignal, passwordSignal]) { () -> AnyObject! in
// arguments
return true
}.subscribeNext { (reduceResult: AnyObject!) -> Void in
KMLog("\(reduceResult)")
}
如何获取参数
我一直无法弄清楚如何将闭包用于 combineLatest
,但是您可以 使用 map
。输入是一个 RACTuple
对象。您可以像这样从输入信号中获取对象:
RACSignal.combineLatest([accountSignal, passwordSignal]).map {
let tuple = [=10=] as! RACTuple
let account = tuple.first as! String
let password = tuple.second as! String
// your code here
}
显然您会希望将您的对象转换为它们的实际类型,但我只是在此处使用字符串作为示例。请记住,您必须 return 在 map
闭包末尾合并对象。