ReactiveCocoa之RAC常用巨集(十)
阿新 • • 發佈:2019-01-08
/** * RAC有許多強大而方便的巨集。 */ - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. [self testAndtest2]; } /** *RAC巨集 */ - (void)test { // RAC:把一個物件的某個屬性繫結一個訊號,只要發出訊號,就會把訊號的內容給物件的屬性賦值 // 給label的text屬性綁定了文字框改變的訊號 RAC(self.label, text) = self.textField.rac_textSignal; // [self.textField.rac_textSignal subscribeNext:^(id x) { // self.label.text = x; // }]; } /** * KVO * RACObserveL:快速的監聽某個物件的某個屬性改變 * 返回的是一個訊號,物件的某個屬性改變的訊號 */ - (void)test2 { [RACObserve(self.view, center) subscribeNext:^(id x) { NSLog(@"%@", x); }]; } - (void)testAndtest2 // textField輸入的值賦值給label,監聽label文字改變, { RAC(self.label, text) = self.textField.rac_textSignal; [RACObserve(self.label, text) subscribeNext:^(id x) { NSLog(@"====label的文字變了"); }]; } /** * 迴圈引用問題 */ - (void)test3 { @weakify(self) RACSignal *signal = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) { @strongify(self) NSLog(@"%@",self.view); return nil; }]; _signal = signal; } /** * 元祖 * 快速包裝一個元組 * 把包裝的型別放在巨集的引數裡面,就會自動包裝 */ - (void)test4 { RACTuple *tuple = RACTuplePack(@1,@2,@4); // 巨集的引數型別要和元祖中元素型別一致, 右邊為要解析的元祖。 RACTupleUnpack_(NSNumber *num1, NSNumber *num2, NSNumber * num3) = tuple;// 4.元祖 // 快速包裝一個元組 // 把包裝的型別放在巨集的引數裡面,就會自動包裝 NSLog(@"%@ %@ %@", num1, num2, num3); }