1、RAC::把一個對象的某個屬性綁定一個信號,只要發出信號,就會把信號的內容給對象的屬性賦值
// 例如:給label的text屬性綁定了文本框改變的信號
RAC(self.label, text) =self.textField.rac_textSignal;
//? ? [self.textField.rac_textSignal subscribeNext:^(id x) {
//? ? ? ? self.label.text = x;
//? ? }];
2、RACObserve:快速的監聽某個對象的某個屬性改變
/**
*? KVO
*? RACObserve:快速的監聽某個對象的某個屬性改變
*? 返回的是一個信號,對象的某個屬性改變的信號
*/
[RACObserve(self.view, center) subscribeNext:^(idx) {
NSLog(@"%@", x);
}];
3、@weakify(self):解決循環引用問題
/**
*? 循環引用問題
*/
@weakify(self)
RACSignal *signal = [RACSignal createSignal:^RACDisposable *(id subscriber) {
@strongify(self)
NSLog(@"%@",self.view);
returnnil;
}];
_signal = signal;
使用 @weakify(self)和@strongify(self)來避免循環引用
解釋:通過編譯看下圖,對比OC 傳統的__weak 和@weakify(self) 其實是一樣,好處是不需要像OC對待循環引用 一個個替換成 weakSelf,
4、RACTuple:元組
/**
* 元祖
* 快速包裝一個元組
* 把包裝的類型放在宏的參數里面,就會自動包裝
*/
RACTuple *tuple = RACTuplePack(@1,@2,@4);
// 宏的參數類型要和元祖中元素類型一致, 右邊為要解析的元祖。
RACTupleUnpack_(NSNumber*num1,NSNumber*num2,NSNumber* num3) = tuple;// 4.元祖
// 快速包裝一個元組
// 把包裝的類型放在宏的參數里面,就會自動包裝
NSLog(@"%@ %@ %@", num1, num2, num3);
RACTupleUnpack 宏,用來解析元組。
他需要的參數就是 鍵、值,右邊的x就是你需要進行處理的元組了:如下
NSDictionary*dict =@{@"user":@"admin",@"age":@"20",@"gender":@"man"};
RACSequence *sequence = dict.rac_sequence;RACSignal *signal = sequence.signal;
[signal subscribeNext:^(idx) {
//進行對數據的處理,如下}];
//可以將上述代碼轉換如下
[dict.rac_sequence.signal subscribeNext:^(idx) { RACTupleUnpack(NSString*key,NSString*value) = x;
NSLog(@"%@-%@",key,value);
}];