這裏推薦使用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功能強大無比,我瞭解的都只是一些皮毛而已😂😂😂