objective-c – “结合最新”与ReactiveCocoa和信号信号
发布时间:2020-12-16 07:06:05 所属栏目:百科 来源:网络整理
导读:在Reactive Cocoa中实现信号信号“最新组合”的最佳方法是什么?我有以下问题: 给定N个文本字段,订阅UIControlEditingEventChanged事件,并根据被调用的值创建新信号.每个订户完成一次订阅,然后将这些值相互结合使用.所以这就是我所拥有的: __block NSMutab
在Reactive
Cocoa中实现信号信号“最新组合”的最佳方法是什么?我有以下问题:
给定N个文本字段,订阅UIControlEditingEventChanged事件,并根据被调用的值创建新信号.每个订户完成一次订阅,然后将这些值相互结合使用.所以这就是我所拥有的: __block NSMutableSet *subscriptions = [NSMutableSet set]; RACSignal *validationSignals = [[[[TEXT_FIELDS rac_sequence].signal flattenMap:^RACStream* (UITextField *textField) { return [textField rac_signalForControlEvents:UIControlEventEditingChanged]; }] flattenMap:^RACStream *(UITextField* textField) { if(![subscriptions containsObject:textField]) { [subscriptions addObject:textField]; return [textField rac_validationSignal]; } return [RACSignal empty]; }]]; 其中rac_validationSignal是我自己的类处理UITextFields的验证.信号正确通过,但一次只能通过一个.我需要一次性获取所有订阅的值,以获得所有已编辑字段的有效性. 编辑: 一种可能的解决方案涉及一个可变数组,我将新字段添加到并按正常情况发送组合信号.这似乎相当不错,还有其他想法吗? __block NSMutableSet *subscriptions = [NSMutableSet set]; __block NSMutableArray *signals = [NSMutableArray array]; RAC(self.editButton,enabled) = [[[[TEXT_FIELDS rac_sequence].signal flattenMap:^RACStream* (UITextField *textField) { return [textField rac_signalForControlEvents:UIControlEventEditingChanged]; }] flattenMap:^RACStream *(UITextField* textField) { if(![subscriptions containsObject:textField]) { [subscriptions addObject:textField]; [signals addObject:[textField rac_validationSignal]]; return [RACSignal combineLatest:signals]; } return [RACSignal empty]; }] map:^NSNumber *(RACTuple *value) { for(NSNumber *isValid in value) { if(![isValid boolValue]) { return @(NO); } } return @(YES); }]; 谢谢! 解决方法
你可以尝试这个:
NSArray *TEXT_FIELDS = @[[txt1.rac_textSignal distinctUntilChanged],[txt2.rac_textSignal distinctUntilChanged]]; [[RACSignal combineLastest:TEXT_FIELDS reduce:^ (NSSTring *txt1,NSString *txt2) { // Return your validate method here // Signal only send `next` value it is different from previous `next` value return [self inputvalication]; }] setKeyPath:@"enabled" onObject:self.myButton]; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |