在上一節(jié)的內(nèi)容中,我們綁定UIButton的enabled屬性并不是最佳實(shí)踐,因?yàn)閁IButton增加了一個ReactiveCocoa的類和一條指令。在這一節(jié)中我們來介紹ReactiveCocoa的指令。使用button的rac_command可以為我們監(jiān)控enabled屬性。 應(yīng)用一段ReactiveCocoa的文檔:
指令,RACCommand類的代表,創(chuàng)建并訂閱動作的信號響應(yīng),可以很容易地實(shí)現(xiàn)一些用戶與應(yīng)用交互時的邊界效果。
指令(行為觸發(fā)的)通常是UI驅(qū)動的,比如按鍵的點(diǎn)擊。指令也可以通過信號自動禁用,這種禁用狀態(tài)呈現(xiàn)在UI上就是禁用與該指令相關(guān)聯(lián)的任何操作。
當(dāng)你想要一次用戶交互發(fā)送一個信號來響應(yīng)的時候指令就很有用。指令信號對訂閱了指令的這個信號而言,她之后的輸出都被指令信號所處理。這有一點(diǎn)點(diǎn)混亂,在第五章我們會看到一些指令相關(guān)的實(shí)踐。
現(xiàn)在我們用下面的代碼來替代之前的在button上綁定enabled屬性的代碼
self.button.rac_command = [[RACCommand alloc] initWithEnabled:validEmailSignal
signalBlock:^RACSignal *(id input){
NSLog(@"Button was pressed.");
return [RACSignal empty];
}];
任何時候button被點(diǎn)擊就會執(zhí)行signalBlock,rac_command屬性會監(jiān)控使能信號validEmailSignal和button的enabled屬性。(實(shí)際上,如果我們保留原來的代碼,新加這一段會引起重復(fù)綁定一個屬性的錯誤)。
另外,這里返回的[RACSignal empty]是什么東西?這里我們需要返回一個信號讓屬于RACCommand的executionSignal
管道(pipe)下發(fā)出去。這個信號代表button按下時一些任務(wù)需要被處理。在這個處理信號沒有返回一個'complete value'('empty '會立即返回一個'complete value')之前button將會保持不可用狀態(tài)。因?yàn)檫@個例子中我們只是打印了一下,所以這里我們只返回一個empty信號。在第五章我們將繼續(xù)討論RACCommand及其用途。
更多建議: