注意點: RAC 使用的時候,回調(diào)方法中的 self 和變量的 self 都需要弱引用,不然會影響 dealloc 的釋放! 例:
WEAKSELF;
self.pic = [[PictureView alloc] initWithFrame:BOUNDS];
[[weakSelf.pic.backBtn rac_signalForControlEvents:UIControlEventTouchUpInside] subscribeNext:^(id x) {
[weakSelf.navigationController popViewControllerAnimated:YES];
}];
[self.view addSubview:self.pic];
第一.RAC的集成
B1CD81EC-70C2-42ED-BE1C-7FD2C213AE16.png
注意點:利用 CocoaPods 集成 RAC 和其他第三方框架時候,有時候會產(chǎn)生沖突;如果確定使用RAC,盡量優(yōu)先集成RAC!
第二.在需要使用RAC的控制器中導(dǎo)入頭文件 或者 在PCH文件中導(dǎo)入頭文件
#import <ReactiveCocoa/ReactiveCocoa.h>
第三.rac_textSignal 使用
1.簡單版 (此方法是針對于TextField的監(jiān)聽,基本可省略各種輸入框的delegate的方法)
DBD5A98C-863E-40E6-8995-5A58B591679F.png
2.限制長度版 (打印出來的x的值就是textfield的輸入內(nèi)容,并且每輸入一次就會調(diào)用一次
而且如果有這種情況,在輸入密碼的時候,你只想在密碼超過六位以后才關(guān)注他是否正確可以這樣)
821F4B9A-E0D2-4C70-8582-299CD53D39D0.png
3.只想關(guān)注用戶輸入了多少個字節(jié),不想關(guān)注他的內(nèi)容,這時候我們可以通過map塊來改變事件的數(shù)據(jù)
1755E458-3464-44C2-B895-6542CA35EFF5.png
4.label 的值根據(jù)輸入框的變化而變化
25B63E63-E1C8-4794-A372-795FA2EA03D8.png
第四.rac_signalForControlEvents監(jiān)聽方法,代替addTarget
EEC29440-E871-48A9-AB31-763191737116.png
第五.rac_signalForSelector代替代理事件
7665F7C8-B980-43AD-B8A4-C43440A07FF3.png
第六.ac_addObserverForName監(jiān)聽通知
// notification.name是通知名 notification.object是傳入值
[[[NSNotificationCenter defaultCenter] rac_addObserverForName:@"postData" object:nil] subscribeNext:^(NSNotification *notification) {
NSLog(@"%@",notification.name);
NSLog(@"%@",notification.object);
}];
第七.RAC的宏定義監(jiān)聽對象屬性,代替KVO
//監(jiān)聽某個對象的某個屬性,返回的是信號。
[RACObserve(_tryla, text) subscribeNext:^(id x) {
NSLog(@"%@",x);
}];
//用于給某個對象的某個屬性綁定。
RAC(_tryla,text) = _textField.rac_textSignal;
第八.rac_sequence.signal遍歷數(shù)組和字典
// 1.遍歷數(shù)組
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) {
// 解包元組,會把元組的值,按順序給參數(shù)里面的變量賦值
RACTupleUnpack(NSString *key,NSString *value) = x;
NSLog(@"%@ %@",key,value);
}];
傳送門待續(xù)