ReactiveCocoa常見巨集

chenshipeng發表於2017-12-22

1、RAC(TARGET, [KEYPATH, [NIL_VALUE]]):用於給某個物件的某個屬性繫結。

   // 只要文字框文字改變,就會修改label的文字
    RAC(self.labelView,text) = _textField.rac_textSignal;
// ReactiveCocoa Bindings
RAC(self, title) = RACObserve(self.viewModel, name);
RAC(self.viewModel, name) = [cell.textField.rac_textSignal takeUntil:cell.rac_prepareForReuseSignal];
複製程式碼

只有當cell的prepareForReuse被呼叫的時候,rac_textSignal才會被觸發,使用到了takeUntil。 2、RACObserve(self, name):監聽某個物件的某個屬性,返回的是訊號。

[RACObserve(self.view, center) subscribeNext:^(id x) {

        NSLog(@"%@",x);
    }];
@weakify(self);
    [RACObserve(self.viewModel, model) subscribeNext:^(id x) {
        @strongify(self);
        [self.collectionView reloadData];
    }];
複製程式碼

3、@weakify(Obj)和@strongify(Obj),一般兩個都是配套使用,在主標頭檔案(ReactiveCocoa.h)中並沒有匯入,需要自己手動匯入,RACEXTScope.h才可以使用。但是每次匯入都非常麻煩,只需要在主標頭檔案自己匯入就好了。

4、 RACTuplePack:把資料包裝成RACTuple(元組類)

// 把引數中的資料包裝成元組 RACTuple *tuple = RACTuplePack(@10,@20); 5、 RACTupleUnpack:把RACTuple(元組類)解包成對應的資料。

// 把引數中的資料包裝成元組
RACTuple *tuple = RACTuplePack(@"xmg",@20);

// 解包元組,會把元組的值,按順序給引數裡面的變數賦值
// name = @"xmg" age = @20
RACTupleUnpack(NSString *name,NSNumber *age) = tuple;
複製程式碼

相關文章