進(jìn)行ReactiveCocoa信號(hào)的訂閱

2018-08-01 16:30 更新

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

  我們添加一個(gè)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)建并運(yùn)行應(yīng)用程序,在textField上輸入一些內(nèi)容。每一次每一個(gè)新的值輸入到textField中,這個(gè)Next value就會(huì)下發(fā)到管道中,然后我們的訂閱塊就會(huì)被執(zhí)行。

input_something_to_textfield

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

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

看吧,少了很多代碼!

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

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

掃描二維碼

下載編程獅App

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

編程獅公眾號(hào)