iOS 開發之 ReactiveCocoa(基礎)

來源:互聯網
上載者:User

標籤:

前言

 

前段時間在看Masonry這個全新的第三方的布局架構的時候,開始瞭解了鏈式編程.後來慢慢的又開始瞭解函數式編程和響應式編程.在這集中的編程思想下,開始接觸和研究了ReactiveCocoa這個架構.在很多大神的blog中,都對這個架構有著高度的評價,各種秀自己如何靈活的使用ReactiveCocoa.今天主要就是這個架構的一些自己的學習筆記.

 

1.ReactiveCocoa簡介

 

ReactiveCocoa(簡稱為RAC),是由Github開源的一個應用於iOS和OS開發的新架構.

 

ReactiveCocoa結合了幾種編程風格:

 

前言

 

前段時間在看Masonry這個全新的第三方的布局架構的時候,開始瞭解了鏈式編程.後來慢慢的又開始瞭解函數式編程和響應式編程.在這集中的編程思想下,開始接觸和研究了ReactiveCocoa這個架構.在很多大神的blog中,都對這個架構有著高度的評價,各種秀自己如何靈活的使用ReactiveCocoa.今天主要就是這個架構的一些自己的學習筆記.

 

1.ReactiveCocoa簡介

 

  • ReactiveCocoa(簡稱為RAC),是由Github開源的一個應用於iOS和OS開發的新架構.

     

  • ReactiveCocoa結合了幾種編程風格:

 

ReactiveCocoa就被開發人員們描述為響應式函數編程架構(FRP);使用RAC就不需要考慮調用的順序,直接考慮結果,使得代碼高彙總,方便管理.

 

2.ReactiveCocoa使用

 

2.1 RACSiganl(RAC的核心類):訊號類 用來資料傳遞

 

注意點:

 

  • 該訊號預設是一個冷訊號,當值改變了,也並不會觸發改訊號,只有訂閱了該訊號,才會觸發改訊號.

  • 訂閱訊號的方法: subscribeNext:

 

//建立一個訊號

    RACSignal *singal = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {

 

        //發送一個訊號.

        [subscriber sendNext:@"Ricky"];

        //如果不在發送資料,最好發送訊號完成,內部會自動調用[RACDisposable disposable]取消訂閱訊號。

        [subscriber sendCompleted];

 

 

        return [RACDisposable disposableWithBlock:^{

 

            //訊號取消

        }];

    }];

 

 

    //訂閱訊號 ,啟用訊號

    [singal subscribeNext:^(id x) {

 

        //x : 就是訊號發送到資料

        NSLog(@"%@",x);

    }];

 

2.2 替換Target和Action

 

  • TextField的字元變化

 

UITextField *textField =[[UITextField alloc]initWithFrame:CGRectMake(100, 100, 100, 40)];

    textField.backgroundColor =[UIColor redColor];

 

    [self.view addSubview:textField];

 

 

    //監聽UITextField的輸入變化

    [[textField rac_textSignal] subscribeNext:^(id x) {

 

        NSLog(@"%@",x);

    }];

 

    //x就是textfield的text,所以就把id修改成NSString

//    [[textField rac_textSignal] subscribeNext:^(NSString * text) {

//        

//        NSLog(@"%@",text);

//    }];

 

  • UIButton的事件的監聽

 

UIButton *button =[UIButton buttonWithType:UIButtonTypeCustom];

 

    button.frame = CGRectMake(100, 100, 100, 100);

    button.backgroundColor = [UIColor yellowColor];

 

    [self.view addSubview:button];

 

    [[button rac_signalForControlEvents:UIControlEventTouchUpInside] subscribeNext:^(id x) {

 

        //這個x就是button,已經知道了類型就可以把id x 修改成UIButton *button

        NSLog(@"%@",x);

 

    }];

 

  • 手勢事件

 

RAC的通知不需要移除,RAC會自己處理改通知的移除

 

[[[NSNotificationCenter defaultCenter] rac_addObserverForName:UIApplicationDidEnterBackgroundNotification object:nil] subscribeNext:^(id x) {

 

        NSLog(@"%@",x);

    }];

 

  • 定時器

 

//延遲一定時間做某事

    [[RACScheduler mainThreadScheduler]afterDelay:2 schedule:^{

 

        NSLog(@"Ricky");

    }];

//每個多長時間調用一次事件    

    [[RACSignal interval:1 onScheduler:[RACScheduler mainThreadScheduler]] subscribeNext:^(id x) {

 

        NSLog(@"%@",x);

 

    }];

 

  • KVO

    監聽UIScrollView的contentOffset

 

UIScrollView *scroller =[[UIScrollView alloc]initWithFrame:CGRectMake(100, 100, 100, 200)];

    [self.view addSubview:scroller];

 

    [RACObserve(scroller, contentOffset) subscribeNext:^(id x) {

 

        NSLog(@"%@",x);

    }];

 

iOS 開發之 ReactiveCocoa(基礎)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.