關(guān)于ReactiveObjC的使用娜膘,其實在16年的時候就已經(jīng)被開發(fā)者們開始使用衡瓶,之前一直沒有觸及到,最近寫項目的時候末患,關(guān)于這個動態(tài)響應(yīng)鏈的框架有了一些了解研叫,確實非常粗暴強大,在這里記錄一下基本的一些使用璧针。
1.替代delegate
創(chuàng)建RACSubject 信號嚷炉,用來替代代理,使用方法如下:
/* 創(chuàng)建信號 */
RACSubject *subject = [RACSubject subject];
/* 發(fā)送信號 */
[subject sendNext:@"發(fā)送信號"];
在別的地方使用的時候
/* 訂閱信號(通常在別的視圖控制器中訂閱探橱,與代理的用法類似) */
[subject subscribeNext:^(id _Nullable x) {
NSLog(@"信號內(nèi)容:%@", x);
}];
2.信號的刪除
由于信號一般創(chuàng)建后申屹,相當(dāng)于是全局的,如果這個對象的信號沒有隨著對象被釋放隧膏,那么在全局任何時候都是可以觸發(fā)這個信號源的哗讥。(常見的是對導(dǎo)航欄監(jiān)控了信號源,如果不在某個頁面進行釋放掉這個信號源胞枕,那么全局的導(dǎo)航欄只要觸發(fā)了導(dǎo)航欄方法杆煞,就會觸發(fā)這個信號源)
/* 創(chuàng)建信號 */
RACSignal *signal = [RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber> _Nonnull subscriber) {
/* 發(fā)送信號 */
[subscriber sendNext:@"發(fā)送信號"];
return nil;
}];
/* 訂閱信號 */
RACDisposable *disposable = [signal subscribeNext:^(id _Nullable x) {
NSLog(@"信號內(nèi)容:%@", x);
}];
/* 取消訂閱 */
[disposable dispose];
3.監(jiān)聽 TextField 的輸入改變(其他控件差不多的使用方法,這里舉個例子)
/* 監(jiān)聽 TextField 的輸入(內(nèi)容改變就會調(diào)用) */
[[textField rac_textSignal] subscribeNext:^(NSString * _Nullable x) {
NSLog(@"輸入框內(nèi)容:%@", x);
}];
/* 添加監(jiān)聽條件 */
[[textField.rac_textSignal filter:^BOOL(NSString * _Nullable value) {
return value.length > 5; // 表示輸入文字長度 > 5 時才會調(diào)用下面的 block
}] subscribeNext:^(NSString * _Nullable x) {
NSLog(@"輸入框內(nèi)容:%@", x);
}];
4.代理KVO監(jiān)聽
可以代替 KVO 監(jiān)聽,下面表示把監(jiān)聽 view 的 frame 屬性改變轉(zhuǎn)換成信號决乎,只要值改變就會發(fā)送信號队询。
[[view rac_valuesForKeyPath:@"frame" observer:self] subscribeNext:^(id _Nullable x) {
NSLog(@"屬性的改變:%@", x); // x 是監(jiān)聽屬性的改變結(jié)果
}];
還有一種更簡單的寫法,就是利用 RAC 的宏构诚,和上面的效果是一樣的蚌斩。
[RACObserve(view, frame) subscribeNext:^(id _Nullable x) {
NSLog(@"屬性的改變:%@", x); // x 是監(jiān)聽屬性的改變結(jié)果
}];
5.監(jiān)聽方法
可以直接對某個控制器內(nèi)部的方法進行操作一系列代碼,挺牛b的.
[[h5VC rac_signalForSelector:@selector(viewWillAppear:)] subscribeNext:^(RACTuple * _Nullable x) {
//在viewwillappear的時候做一系列操作
}];
暫時先就這么多,以后再更新范嘱,很多可以舉一反三的送膳,非常強大,之前有接觸過但沒怎么用彤侍,現(xiàn)在也給我集成項目中了肠缨,除了能帶來一些方便以外逆趋,確實還能解決一些我們平時無法做的的操作盏阶,所以我才用了0.0(當(dāng)無計可施的時候,用了這個才發(fā)現(xiàn)有用呀)闻书。