ReactiveCocoa怎么使用指令?

2018-08-01 14:58 更新

在上一節(jié)的內(nèi)容中,我們綁定UIButton的enabled屬性并不是最佳實(shí)踐,因?yàn)閁IButton增加了一個(gè)ReactiveCocoa的類和一條指令。在這一節(jié)中我們來介紹ReactiveCocoa的指令。使用button的rac_command可以為我們監(jiān)控enabled屬性。 應(yīng)用一段ReactiveCocoa的文檔:

指令,RACCommand類的代表,創(chuàng)建并訂閱動(dòng)作的信號(hào)響應(yīng),可以很容易地實(shí)現(xiàn)一些用戶與應(yīng)用交互時(shí)的邊界效果。

指令(行為觸發(fā)的)通常是UI驅(qū)動(dòng)的,比如按鍵的點(diǎn)擊。指令也可以通過信號(hào)自動(dòng)禁用,這種禁用狀態(tài)呈現(xiàn)在UI上就是禁用與該指令相關(guān)聯(lián)的任何操作。

當(dāng)你想要一次用戶交互發(fā)送一個(gè)信號(hào)來響應(yīng)的時(shí)候指令就很有用。指令信號(hào)對(duì)訂閱了指令的這個(gè)信號(hào)而言,她之后的輸出都被指令信號(hào)所處理。這有一點(diǎn)點(diǎn)混亂,在第五章我們會(huì)看到一些指令相關(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];
                                                }];

任何時(shí)候button被點(diǎn)擊就會(huì)執(zhí)行signalBlock,rac_command屬性會(huì)監(jiān)控使能信號(hào)validEmailSignal和button的enabled屬性。(實(shí)際上,如果我們保留原來的代碼,新加這一段會(huì)引起重復(fù)綁定一個(gè)屬性的錯(cuò)誤)。

另外,這里返回的[RACSignal empty]是什么東西?這里我們需要返回一個(gè)信號(hào)讓屬于RACCommand的executionSignal管道(pipe)下發(fā)出去。這個(gè)信號(hào)代表button按下時(shí)一些任務(wù)需要被處理。在這個(gè)處理信號(hào)沒有返回一個(gè)'complete value'('empty '會(huì)立即返回一個(gè)'complete value')之前button將會(huì)保持不可用狀態(tài)。因?yàn)檫@個(gè)例子中我們只是打印了一下,所以這里我們只返回一個(gè)empty信號(hào)。在第五章我們將繼續(xù)討論RACCommand及其用途。


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)