1. 程式人生 > >ReactiveCocoa學習之建立訊號

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

sendNext:@"111"];

        [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"];


上面就是常用的三種訊號類,我們實際開發中多數使用前兩種。