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
}
両方の変数が設定されている限り、またはいずれ firstName
かを変更するたびに setFullName が呼び出されますlastName
。
変更が「解決」してフルネームを呼び出すまで待ちたいので、そのように同じ関数に値を設定するsetFullName
と、最終値で1回呼び出されます。
どうやってやるの?