15.ReactiveCocoa

weixin_34365417發表於2018-04-30

ReactiveCocoa簡介

814874-e7e9a62f74d36741
image

ReactiveCocoa(簡稱為RAC),是由Github開源的一個應用於iOS和OS開發的新框架,Cocoa是蘋果整套框架的簡稱,因此很多蘋果框架喜歡以Cocoa結尾。

814874-d3b935c18b570e5b.png
image.png

響應式程式設計思想
響應式程式設計思想:不需要考慮呼叫順序,只需要知道考慮結果,類似於蝴蝶效應,產生一個事件,會影響很多東西,這些事件像流一樣的傳播出去,然後影響結果,借用物件導向的一句話,萬物皆是流。

代表:KVO

學習 RAC 我們首先要了解 RAC 都有哪些類
RACSignal
RACSubject
RACSequence
RACMulticastConnection
RACCommand

匯入ReactiveCocoa


ReactiveCocoa的GitHub地址
Objective-C
ReactiveCocoa 2.5版本以後改用了Swift,所以Objective-C專案需要匯入2.5版本

CocoaPods整合:

platform :ios, '8.0'

target 'YouProjectName' do

use_frameworks!
pod 'ReactiveCocoa', '~> 2.5'

end
PS:新版本的CocoaPods需要加入

target 'YouProjectName' do
...
end

ReactiveCocoa常見類
RACSiganl 訊號類
訊號類,一般表示將來有資料傳遞,只要有資料改變,訊號內部接收到資料,就會馬上發出資料。

注意:

訊號類(RACSiganl),只是表示當資料改變時,訊號內部會發出資料,它本身不具備傳送訊號的能力,而是交給內部一個訂閱者去發出。
預設一個訊號都是冷訊號,也就是值改變了,也不會觸發,只有訂閱了這個訊號,這個訊號才會變為熱訊號,值改變了才會觸發。
如何訂閱訊號:呼叫訊號RACSignal的subscribeNext就能訂閱
使用:

// RACSignal使用步驟:
// 1.建立訊號 + (RACSignal *)createSignal:(RACDisposable * (^)(id<RACSubscriber> subscriber))didSubscribe
// 2.訂閱訊號,才會啟用訊號. - (RACDisposable *)subscribeNext:(void (^)(id x))nextBlock
// 3.傳送訊號 - (void)sendNext:(id)value

// RACSignal底層實現:
// 1.建立訊號,首先把didSubscribe儲存到訊號中,還不會觸發。
// 2.當訊號被訂閱,也就是呼叫signal的subscribeNext:nextBlock
// 2.2 subscribeNext內部會建立訂閱者subscriber,並且把nextBlock儲存到subscriber中。
// 2.1 subscribeNext內部會呼叫siganl的didSubscribe
// 3.siganl的didSubscribe中呼叫[subscriber sendNext:@1];
// 3.1 sendNext底層其實就是執行subscriber的nextBlock

// 1.建立訊號
RACSignal *siganl = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {

    // block呼叫時刻:每當有訂閱者訂閱訊號,就會呼叫block。

    // 2.傳送訊號
    [subscriber sendNext:@1];

    // 如果不在傳送資料,最好傳送訊號完成,內部會自動呼叫[RACDisposable disposable]取消訂閱訊號。
    [subscriber sendCompleted];

    return [RACDisposable disposableWithBlock:^{

        // block呼叫時刻:當訊號傳送完成或者傳送錯誤,就會自動執行這個block,取消訂閱訊號。

        // 執行完Block後,當前訊號就不在被訂閱了。

        NSLog(@"訊號被銷燬");

    }];
}];

// 3.訂閱訊號,才會啟用訊號.
[siganl subscribeNext:^(id x) {
    // block呼叫時刻:每當有訊號發出資料,就會呼叫block.
    NSLog(@"接收到資料:%@",x);
}];

https://blog.csdn.net/wzc10101415/article/details/55051339

https://www.cnblogs.com/ningmengcao-ios/p/6803878.html

最快讓你上手ReactiveCocoa之基礎篇

最快讓你上手ReactiveCocoa之進階篇