進行ReactiveCocoa信號的訂閱

2018-08-01 16:30 更新

  當你隨時都想知道某一個值的改變時(不管是next、error或者completion),你就會訂閱流——一種最常見的signal。使用信號通常都會有副作用,比如下面這個例子。

  我們添加一個textfield控件到viewController's View上,這里我使用storyboard來做,你怎么做隨你喜好。

adding_a_text_field

在ViewDidLoad中添加如下代碼,訂閱textfield的rac_textSignal。

[self.textField.rac_textSignal subscribeNext:^(id x){
    NSLog(@"New Value: %@",x);
} error:^(NSError * error){
    NSLog(@"Error : %@", error);
} completed:^{
    NSLog(@"Completed.");
}];

創(chuàng)建并運行應用程序,在textField上輸入一些內(nèi)容。每一次每一個新的值輸入到textField中,這個Next value就會下發(fā)到管道中,然后我們的訂閱塊就會被執(zhí)行。

input_something_to_textfield

有趣的是,這個特殊的信號不會發(fā)送錯誤值,僅僅在釋放的時候發(fā)送一個完成值,所以這兩個訂閱塊通常不會被調(diào)用。我們可以使用RACSignal上的一個簡便的方法subsribeNext:來簡化我們的代碼:

[self.textField.rac_textSignal subscribeNext:^(id x){
    NSLog(@"New Value: %@", x);
}];

看吧,少了很多代碼!

當你訂閱一個信號時,實際上你創(chuàng)建了一個“訂閱者”,訂閱者就好比通道最下方的一個盆,只有放好了盆,通道里面的值才能被接住,通道才能放心的打開。它是自動保留的,并同時保留她訂閱的信號,你也可以手動配置訂閱者,但這不是一種典型的行為。下一章我們將會學習,當視圖復用的時候(像CollectionViewCells 或TableViewCells),如何去有效地配置信號。

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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號