ReactiveCocoa學習之建立訊號
ReactiveCocoa 是一個 iOS 中的函式式響應式程式設計框架,簡稱RAC,RAC關鍵解決的問題是開發中經常回見的“低聚合,高耦合”問題。在RAC出現之前,我們編寫iOS程式碼,大部分都是在響應一些事件:按鈕點選、接收網路訊息、屬性變化等等。但處理事件的形式在蘋果官方API中卻有好幾種:如target-action、代理方法、KVO、回撥或其它。以上這幾種,往往在一個專案中基本都會使用到,在不同的地方會出現很多處理事件的形式,這就帶來了不能很好統一管理問題。因此,我們想,有沒有一個統一管理的解決方案呢?這個方案又是怎樣的呢?到這裡ReactiveCocoa就該粉墨登場了,它出現的目的就是為了解決統一標準去管理程式碼中的事件。
RAC在使用時,通過“訊號”來傳遞資訊,使用訊號的三部曲:1.建立訊號,2.訂閱訊號,3.傳送訊號;
下面具體看下幾種訊號類的使用:
一、RACSignal,這是所有訊號類的父類
//1建立訊號
RACSignal *signal = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
//3傳送訊號
[subscriber
[subscriber sendNext:@"111"];
[subscriber sendNext:@"111"];
return nil;
}];
//2訂閱訊號, 必須先訂閱才能傳送
[signal subscribeNext:^(id x) {
NSLog(@"%@",x);
}];
二、RACSubject
//1建立訊號
RACSubject *subject = [RACSubject subject];
//2訂閱訊號
//不同訊號訂閱方式不一樣,RACSubject處理訂閱:僅僅是儲存訂閱
[subject subscribeNext:^(id x) {
NSLog(@"訂閱者一接收到資料");
}];
//3.傳送資料
[subject sendNext:@"9999"];
三、 RACReplaySubject, RACReplaySubject 可以先發送訊號,在訂閱訊號( 2 , 3 順序可以調換)
//1建立訊號
RACReplaySubject *subject = [RACReplaySubject subject];
//2訂閱訊號
[subject subscribeNext:^(id x) {
NSLog(@"%@",x);
}];
//3傳送訊號
[subject sendNext:@"yyyyy"];
上面就是常用的三種訊號類,我們實際開發中多數使用前兩種。