iOS--ReactiveCocoa的簡單使用

一. 框架的導入

這裏推薦使用cocoa pods,管理起來比較方便。 (1)安裝 pods以後項目目錄下新建Podfile文件,文件內容👇ios

platform:'ios', '8.0'
target 'RWReactivePlayground' do
use_frameworks!
pod 'ReactiveCocoa'
end
複製代碼

(2)在Build Setting中將EMBEDDED_CONTENT_CONTAINS_SWIFT設置爲YES數組

此時ReactiveCocoa已經導入成功!!!bash

二. 簡單使用

在須要使用的頁面中引入 #import <ReactiveCocoa/ReactiveCocoa.h>框架

#####(1)rac_textSignal 塊 此方法是針對於TextField的監聽,基本可省略各類輸入框的delegate的方法。 例:ide

_textfild=[[UITextField alloc]initWithFrame:CGRectMake(20, 100, 100, 40)];
    _textfild.placeholder=@"請輸入";
    [self.view addSubview:_textfild];
[[_textfild rac_textSignal] subscribeNext:^(id x) {
        NSLog(@"%@",x);
    }];
複製代碼

打印出來的x的值就是textfield的輸入內容,而且每輸入一次就會調用一次 並且若是有這種狀況,在輸入密碼的時候,你只想在密碼超過六位之後才關注他是否正確能夠這樣 例:post

[[_textfild.rac_textSignal
filter:^BOOL(id value){
   NSString*text = value;
   return text.length > 6;
}]
subscribeNext:^(id x){
   NSLog(@"%@", x);
  }];
複製代碼

還有一種狀況,咱們只想關注用戶輸入了多少個字節,不想關注他的內容,這時候咱們能夠經過map塊來改變事件的數據 例:ui

[[[_textfild.rac_textSignal
  map:^id(NSString*text){
    return @(text.length);
  }]
  filter:^BOOL(NSNumber*length){
    return[length integerValue] > 6;
  }]
  subscribeNext:^(id x){
    NSLog(@"%@", x);
  }];
複製代碼

這時候你會發現,只有在輸入框的字數超過六之後纔會輸出,而且只是輸入字數。 #####(2)rac_signalForControlEvents監聽方法,代替addTargetspa

如題,此block能夠監聽相似於textField button等的點擊方法。 例:代理

[[_textfild rac_signalForControlEvents:UIControlEventEditingChanged] 
   subscribeNext:^(id x) {
            NSLog(@"%@",x);
    }];

[[_button rac_signalForControlEvents:UIControlEventTouchUpInside]
   subscribeNext:^(id x) {
            NSLog(@"%@",x);
   }];
複製代碼

#####(3)rac_signalForSelector代替代理事件 使用這個block須要傳入兩個參數,須要執行的方法名和須要遵照的協議,好比一個也 main須要多個alertview,若是使用代理的話,須要用tag判斷是哪一個alert,點擊的是哪個按鈕,代碼會很是繁瑣,此時使用RAC,看效果👇 例:code

UIAlertView * alertview=[[UIAlertView alloc]initWithTitle:@"RAC" message:@"RAC TE$XT" delegate:self cancelButtonTitle:@"queding" otherButtonTitles:@"quxaio", nil];
    [[self rac_signalForSelector:@selector(alertView:clickedButtonAtIndex:) fromProtocol:@protocol(UIAlertViewDelegate)] subscribeNext:^(RACTuple *tuple) {
        NSLog(@"000000===%@",tuple.first);
        NSLog(@"111111===%@",tuple.second);
    }];
    [alertview show];
    //監聽點擊的是哪個按鈕 
    [[alertview rac_buttonClickedSignal] subscribeNext:^(id x) {
        NSLog(@"%@",x);
    }];
複製代碼

此時點擊alert的按鈕能夠發現,點擊「肯定」就會輸出「00000」,點擊另一個同理,下面的block監聽點擊事件,輕鬆解決!!! #####(4)ac_addObserverForName監聽通知 這個使用起來就更簡單了,註冊通知正常寫,在接收通知的時候 例:

[[[NSNotificationCenter defaultCenter] rac_addObserverForName:@"postData" object:nil] subscribeNext:^(NSNotification *notification) {
        NSLog(@"%@",notification.name);
        NSLog(@"%@",notification.object);
    }];
複製代碼

經過打印能夠知道 notification.name是通知名 notification.object是傳入值,仍是比較方便的,畢竟RAC的宗旨就是減小代碼量。 #####(5)RAC的宏定義監聽對象屬性,代替KVO KVO就不用多說了,監聽,接受監聽的方法,註銷,麻煩死了,向下看👇 例:

//監聽某個對象的某個屬性,返回的是信號。
[RACObserve(_tryla, text) subscribeNext:^(id x) {
        NSLog(@"%@",x);
    }];
//用於給某個對象的某個屬性綁定。
RAC(_tryla,text) = _textField.rac_textSignal;
複製代碼

RACObserve是RAC的一個宏,須要傳入兩個參數,要監聽的對象和對象屬性,完成監聽。 #####(6)rac_sequence.signal便利數組和字典

// 1.遍歷數組
    NSArray *numbers = @[@1,@2,@3,@4];
    [numbers.rac_sequence.signal subscribeNext:^(id x) {
        NSLog(@"%@",x);
    }];
// 2.遍歷字典,遍歷出來的鍵值對會包裝成RACTuple(元組對象)
    NSDictionary *dict = @{@"name":@"xmg",@"age":@18};
    [dict.rac_sequence.signal subscribeNext:^(RACTuple *x) {
        // 解包元組,會把元組的值,按順序給參數裏面的變量賦值
        RACTupleUnpack(NSString *key,NSString *value) = x;
        NSLog(@"%@ %@",key,value);
    }];
複製代碼

就這些了,RAC功能強大無比,我瞭解的都只是一些皮毛而已😂😂😂

相關文章
相關標籤/搜索