ReactiveCocoa筆記
- map:方法可以轉(zhuǎn)換信號(hào),將一個(gè)信號(hào)處理后轉(zhuǎn)變?yōu)榱硪粋€(gè)信號(hào),例如:
RACSignal *validUsernameSignal = [self.usernameTextField.rac_textSignal
map:^id(NSString *text) {
return @([self isValidUsername:text]);
}];
- RAC(TARGET, ...)宏可以用keyValue的方式使用信號(hào)中的值給object的key賦值,例如:
RAC(self.passwordTextField, backgroundColor) =
[validPasswordSignal
map:^id(NSNumber *passwordValid) {
return [passwordValid boolValue] ? [UIColor clearColor] : [UIColor yellowColor];
}];
- combineLatest:方法可以組合多個(gè)信號(hào),變?yōu)橐粋€(gè)信號(hào),例如:
RACSignal *signUpActiveSignal =
[RACSignal combineLatest:@[validUsernameSignal, validPasswordSignal]
reduce:^id(NSNumber *usernameValid, NSNumber *passwordValid) {
return @([usernameValid boolValue] && [passwordValid boolValue]);
}];
- doNext:可以添加signal流的響應(yīng)事件而不改變當(dāng)前的管道流,我們稱它為side-effect,side-effect不改變信號(hào)的轉(zhuǎn)變,只是做出響應(yīng):例子如下:
[[[[self.signInButton
rac_signalForControlEvents:UIControlEventTouchUpInside]
doNext:^(id x) {
self.signInButton.enabled = NO;
self.signInFailureText.hidden = YES;
}]
flattenMap:^id(id x) {
return [self signInSignal];
}]
subscribeNext:^(NSNumber *signedIn) {
self.signInButton.enabled = YES;
BOOL success = [signedIn boolValue];
self.signInFailureText.hidden = success;
if (success) {
[self performSegueWithIdentifier:@"signInSuccess" sender:self];
}
}];
- flattenMap:可以取出signal的signal.當(dāng)我們使用map:的時(shí)候,直接return一個(gè)value,系統(tǒng)便會(huì)自動(dòng)封裝成一個(gè)新的signal.但是當(dāng)返回的value本身就是一個(gè)signal的時(shí)候,系統(tǒng)還是會(huì)幫我們?cè)诎粚觭ignal, 所以,這種情況下,我們?nèi)∷幍氖亲罾锩娴膕ignal,而不是系統(tǒng)在外層幫我們包裹的signal.所以這種情況下就會(huì)使用flattenMap:而不是map:,還是上面的代碼
[[[[self.signInButton
rac_signalForControlEvents:UIControlEventTouchUpInside]
doNext:^(id x) {
self.signInButton.enabled = NO;
self.signInFailureText.hidden = YES;
}]
flattenMap:^id(id x) {
return [self signInSignal];
}]
subscribeNext:^(NSNumber *signedIn) {
self.signInButton.enabled = YES;
BOOL success = [signedIn boolValue];
self.signInFailureText.hidden = success;
if (success) {
[self performSegueWithIdentifier:@"signInSuccess" sender:self];
}
}];
詳細(xì)工程參見raywenderlich上的