ReactiveObjC的基本使用

關(guān)于ReactiveObjC的使用,其實(shí)在16年的時(shí)候就已經(jīng)被開(kāi)發(fā)者們開(kāi)始使用,之前一直沒(méi)有觸及到,最近寫(xiě)項(xiàng)目的時(shí)候,關(guān)于這個(gè)動(dòng)態(tài)響應(yīng)鏈的框架有了一些了解,確實(shí)非常粗暴強(qiáng)大,在這里記錄一下基本的一些使用。

1.替代delegate

創(chuàng)建RACSubject 信號(hào),用來(lái)替代代理,使用方法如下:

/* 創(chuàng)建信號(hào) */
RACSubject *subject = [RACSubject subject];

/* 發(fā)送信號(hào) */
[subject sendNext:@"發(fā)送信號(hào)"];

在別的地方使用的時(shí)候

/* 訂閱信號(hào)(通常在別的視圖控制器中訂閱,與代理的用法類(lèi)似) */
[subject subscribeNext:^(id  _Nullable x) {

    NSLog(@"信號(hào)內(nèi)容:%@", x);
}];

2.信號(hào)的刪除

由于信號(hào)一般創(chuàng)建后,相當(dāng)于是全局的,如果這個(gè)對(duì)象的信號(hào)沒(méi)有隨著對(duì)象被釋放,那么在全局任何時(shí)候都是可以觸發(fā)這個(gè)信號(hào)源的。(常見(jiàn)的是對(duì)導(dǎo)航欄監(jiān)控了信號(hào)源,如果不在某個(gè)頁(yè)面進(jìn)行釋放掉這個(gè)信號(hào)源,那么全局的導(dǎo)航欄只要觸發(fā)了導(dǎo)航欄方法,就會(huì)觸發(fā)這個(gè)信號(hào)源)

/* 創(chuàng)建信號(hào) */
RACSignal *signal = [RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber>  _Nonnull subscriber) {

    /* 發(fā)送信號(hào) */
    [subscriber sendNext:@"發(fā)送信號(hào)"];

    return nil;
}];

/* 訂閱信號(hào) */
RACDisposable *disposable = [signal subscribeNext:^(id  _Nullable x) {

    NSLog(@"信號(hào)內(nèi)容:%@", x);
}];

/* 取消訂閱 */
[disposable dispose];

3.監(jiān)聽(tīng) TextField 的輸入改變(其他控件差不多的使用方法,這里舉個(gè)例子)

/* 監(jiān)聽(tīng) TextField 的輸入(內(nèi)容改變就會(huì)調(diào)用) */
[[textField rac_textSignal] subscribeNext:^(NSString * _Nullable x) {

    NSLog(@"輸入框內(nèi)容:%@", x);
}];

/* 添加監(jiān)聽(tīng)條件 */
[[textField.rac_textSignal filter:^BOOL(NSString * _Nullable value) {

    return value.length > 5; // 表示輸入文字長(zhǎng)度 > 5 時(shí)才會(huì)調(diào)用下面的 block

}] subscribeNext:^(NSString * _Nullable x) {

     NSLog(@"輸入框內(nèi)容:%@", x);
}];

4.代理KVO監(jiān)聽(tīng)

可以代替 KVO 監(jiān)聽(tīng),下面表示把監(jiān)聽(tīng) view 的 frame 屬性改變轉(zhuǎn)換成信號(hào),只要值改變就會(huì)發(fā)送信號(hào)。

[[view rac_valuesForKeyPath:@"frame" observer:self] subscribeNext:^(id  _Nullable x) {

    NSLog(@"屬性的改變:%@", x); // x 是監(jiān)聽(tīng)屬性的改變結(jié)果
}];

還有一種更簡(jiǎn)單的寫(xiě)法,就是利用 RAC 的宏,和上面的效果是一樣的。
[RACObserve(view, frame) subscribeNext:^(id _Nullable x) {

NSLog(@"屬性的改變:%@", x); // x 是監(jiān)聽(tīng)屬性的改變結(jié)果

}];

5.監(jiān)聽(tīng)方法

可以直接對(duì)某個(gè)控制器內(nèi)部的方法進(jìn)行操作一系列代碼,挺牛b的.

[[h5VC rac_signalForSelector:@selector(viewWillAppear:)] subscribeNext:^(RACTuple * _Nullable x) {
                        //在viewwillappear的時(shí)候做一系列操作
                    }];

暫時(shí)先就這么多,以后再更新,很多可以舉一反三的,非常強(qiáng)大,之前有接觸過(guò)但沒(méi)怎么用,現(xiàn)在也給我集成項(xiàng)目中了,除了能帶來(lái)一些方便以外,確實(shí)還能解決一些我們平時(shí)無(wú)法做的的操作,所以我才用了0.0(當(dāng)無(wú)計(jì)可施的時(shí)候,用了這個(gè)才發(fā)現(xiàn)有用呀)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,126評(píng)論 4 61
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,856評(píng)論 25 709
  • 2017年12月6日下午放學(xué)后,神農(nóng)鎮(zhèn)中心幼兒園黨員同志和幫扶教師一起帶上孩子喜愛(ài)的玩具,去幼兒家中詳細(xì)了解幼兒家...
    遠(yuǎn)方的靈芝草閱讀 523評(píng)論 0 0
  • 08年,高考失利。掙扎了一暑假,被迫去復(fù)讀。高考失利的當(dāng)然不止我一個(gè)人,有人選擇來(lái)復(fù)讀,有人繼續(xù)上大學(xué),有人輟學(xué)。...
    孽孽閱讀 286評(píng)論 0 0
  • 2016年12月19日群資料整理目錄 談?wù)摲窒硪唬荷钪胁煊X(jué)到貼標(biāo)簽的妙用 談?wù)摲窒矶赫鎼?ài)祈禱文,讓你放松自己 ...
    麗的自白書(shū)閱讀 297評(píng)論 0 0

友情鏈接更多精彩內(nèi)容