W3Cschool
恭喜您成為首批注冊用戶
獲得88經驗值獎勵
狀態(tài)推導是ReactiveCocoa的另一個核心組件。這里不是指類的某個屬性(類似于設置一個新的值就代表狀態(tài)發(fā)生了改變),這里我們指的是把屬性抽象為流。我們來為上一節(jié)的例子增加狀態(tài)推導。
假設我們的視圖是用來創(chuàng)建賬戶的,我們只允許包含有'@'字符的Email地址,當且僅當,輸入的用戶名有效時使按鍵可用,同時我們也希望通過TextField中Text的顏色給用戶提供反饋。
RAC(self.button, enabled) = [self.textField.rac_textSignal map:^id (NSString *value){
return @([value rangeOfString:@"@"].location != NSNotfound);
}];
請注意,稍候將看到我們如何使用buttons的命令來更好地約束她的enable屬性。
RAC()
宏需要兩個參數:‘對象’以及這個對象的某個屬性的'keyPath'。然后將表達式右邊的值和'keyPath'做一個單向的綁定,這個值必須是NSObject類型,所以我們會把boolean量封裝成NSNumber。
但是,文本的顏色怎么辦?實際上我們在這個基礎上做一點點重構就可以了。
RACSignal * validEmailSignal = [self.textField.rac_textSignal map:^id (NSString *value){
return @([value rangeOfString:@"@"].location != NSNotFound);
}];
RAC(self.button, enabled) = validEmailSignal;
RAC(self.textField, textColor) = [validEmailSignal map: ^id (id value){
if([value boolValue]){
return [UIColor greenColor];
}else{
return [UIColor redColor];
}
}];
很好!看到我們怎樣復用validEmailSignal嗎?這在ReactiveCocoa中是非常常見的用法。在viewDidLoad方法之外,我們也不用寫任何代碼,這也很常見。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯系方式:
更多建議: