RAC宏介紹

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,


圖一


圖2


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);

}];

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容