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