gpt4 book ai didi

objective-c - "Combine latest"与 ReactiveCocoa 和信号的信号

转载 作者:搜寻专家 更新时间:2023-10-30 19:47:45 25 4
gpt4 key购买 nike

在 ReactiveCocoa 中对信号的信号实现“最新组合”的最佳方法是什么?我有以下问题:

给定 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];

关于objective-c - "Combine latest"与 ReactiveCocoa 和信号的信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19239752/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com