寫在之前
ReactiveCocoa是什么套腹,它是Github上的一個(gè)開源的函數(shù)響應(yīng)式編程框架链峭,下面簡稱RAC
他的作用是幫我們很簡單的處理事件盹牧,這里要注意通危,目前RAC有針對oc跟swift兩個(gè)類庫熄守,OC對應(yīng)的是ReactiveObjC,swift對應(yīng)的則是ReactiveCocoa蜈垮,目前已經(jīng)是5.0.0
版本。
雖然我公司項(xiàng)目已經(jīng)使用swift進(jìn)行開發(fā)裕照,但是考慮到還有部分沒有使用因此這邊圍繞OC語言版本展開描述攒发。
因?yàn)镽AC框架中對于block的大量使用,對block不熟悉的同學(xué)可以先補(bǔ)課一波晋南。
1惠猿、導(dǎo)入ReactiveObjC
這里使用CocoaPods導(dǎo)入,假設(shè)大家已經(jīng)安裝好了CocoaPods负间,沒裝的自行百度呀偶妖。新建簡單工程,cd到工程跟目錄下政溃,然后Podfile文件內(nèi)容如下:
use_frameworks!
platform :ios, "8.0"
target '002--RAC' do
pod 'ReactiveObjC'
end
這里注意铃剔,002--RAC==要換成你新建的工程名稱==
2誉结、創(chuàng)建信號并發(fā)送數(shù)據(jù)
在RAC里面少办,一切皆信號获讳,信號可以發(fā)送數(shù)據(jù),接收數(shù)據(jù)
//1愤诱、創(chuàng)建信號云头,剛創(chuàng)建的時(shí)候是冷信號
RACSignal *signal = [RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber> _Nonnull subscriber) {
//3、訂閱者發(fā)送數(shù)據(jù)
[subscriber sendNext:@"發(fā)送內(nèi)容"];
_subscriber = subscriber; //這邊把訂閱者保存下來就不會自動取消訂閱
return [RACDisposable disposableWithBlock:^{
//取消訂閱信號就會來到這里转锈,清空資源
NSLog(@"取消訂閱信號");
}];
}];
//2盘寡、訂閱信號,這時(shí)候變成熱信號
//下面這個(gè)block只要subscriber發(fā)送數(shù)據(jù)撮慨,這邊就會調(diào)用竿痰,可調(diào)用多次
RACDisposable *disposable = [signal subscribeNext:^(id _Nullable x) {
//x:信號發(fā)送的內(nèi)容!!
NSLog(@"%@",x);
}];
//這邊即使不調(diào)用脆粥,默認(rèn)一個(gè)信號發(fā)送完收據(jù)會主動取消訂閱
[disposable dispose]; //手動取消訂閱
RACSubject的使用:
//1、創(chuàng)建信號
RACSubject *subject = [RACSubject subject];
//2影涉、訂閱信號
//這邊是可以保存多個(gè)訂閱者
[subject subscribeNext:^(id _Nullable x) {
NSLog(@"接收到的數(shù)據(jù)1:%@",x);
}];
[subject subscribeNext:^(id _Nullable x) {
NSLog(@"接收到的數(shù)據(jù)2:%@",x);
}];
//3.發(fā)送數(shù)據(jù)
//遍歷出所有的訂閱者,調(diào)用nextBlock
[subject sendNext:@"漢堡包"];
分析一下各個(gè)類作用:
RACSignal 信號類-最常見也是最常用的類
- 創(chuàng)建信號
- 通過訂閱者訂閱信號
- 發(fā)送信號
RACDisposable 當(dāng)信號發(fā)送完畢变隔,或者發(fā)送失敗,幫助我們?nèi)∠嗛?/p>
RACSubscriber是一個(gè)協(xié)議蟹倾,也是定閱者-發(fā)送信號
RACSubject 繼承RACSignal匣缘,信號提供者,既可以充當(dāng)信號鲜棠,又可以發(fā)送信號