1

使用 ReactiveCocoa 和 KVO,如果您订阅了某些内容,它会在您更改绑定的值时立即通知订阅者。假设我的状态取决于 user.firstName 和 user.lastName:

RAC(self.fullName) = [RACSignal 
    combineLatest:@[RACAble(self.firstName), RACAble(self.lastName)]
    reduce:^(NSString* firstName, NSString* lastName) {
        return [NSString stringWithFormat:@"%@ %@", firstName, lastName];
    }];

self.firstName = @"Bob";
self.lastName  = @"Wilson";
self.firstName = @"Amy";
self.lastName  = @"Johnson";

// ... 

- (void)setFullName:(NSString*)fullName
{
    NSLog(@"FULL NAME %@", fullName);
    // Bob Wilson
    // Amy Wilson
    // Amy Johnson
}

只要设置了两个变量,每次我更改or时它都会调用setFullNamefirstNamelastName

我希望它等到更改“确定”才能调用全名,因此,如果我在同一个函数中设置值,它会setFullName使用最终值调用一次。

我怎样才能做到这一点?

4

1 回答 1

2

而不是combineLatest:你可以使用zip:. 这将等待所有输入信号发送一个值。这样,只有在firstName,lastName设置发生时才会通知订阅者。

如果这是不可接受的,并且有可能只是firstNamelastName将改变,那么您可以throttle:combineLatest:. 这样,如果在限制时间内发生了几次变化,那么只有最后一个值将被发送给订阅者。

旁注:如果您可以fullName基于当前值构建,那么为什么将其存储在属性中?您可以将其用作信号。

于 2013-08-24T21:32:06.730 回答