? ?ReactiveObjC是GitHub上一個開源的已經(jīng)停止維護的響應(yīng)式編程框架栋盹。原作者已從ReactiveObjC轉(zhuǎn)向做RXSwift的開發(fā)焰络。
? ?學習RAC胧后,要先從MVVM入手尊沸,RAC作為ViewModel和Controller的粘合劑使用俊犯,能夠用更少的代碼完成更高效的工作妇多。
? ?RAC的整體流程:創(chuàng)建信號
- 訂閱信號
- 發(fā)送信號
。沒有訂閱信號也就不會被創(chuàng)建燕侠。Block是OC的知識點者祖,swift中為閉包。RAC絕大部分都是有Block來完成訂閱后的消息處理機制绢彤。
一七问、RACSignal (信號)的創(chuàng)建、訂閱
#一茫舶、創(chuàng)建信號械巡,將事件轉(zhuǎn)換成信號
RACSignal *signal = [RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber> _Nonnull subscriber) {
/* 觸發(fā)后 發(fā)送信號 */
[subscriber sendNext:@"被觸發(fā),發(fā)送信號"];
return nil;
}];
RACDisposable *disposable = [signal subscribeNext:^(id _Nullable x) {
NSLog(@"信號內(nèi)容:%@", x);
}];
/*取消信號訂閱*/
[disposable dispose];
二、RACTuple(元組)坟比,類似Swift的元組芦鳍,但這里只是數(shù)組的擴展組合
/* 熟悉Swift的可以跳過元組認識 */
/* 創(chuàng)建元祖 */
RACTuple *tuple = [RACTuple tupleWithObjects:@"1", @"2", @"3", @"4", @"5", nil];
/* 從別的數(shù)組中獲取內(nèi)容 */
RACTuple *tuple = [RACTuple tupleWithObjectsFromArray:@[@"1", @"2", @"3", @"4", @"5"]];
/* 利用 RAC 宏快速封裝 */
RACTuple *tuple = RACTuplePack(@"1", @"2", @"3", @"4", @"5");
NSLog(@"取元祖內(nèi)容:%@", tuple[0]);
NSLog(@"第一個元素:%@", [tuple first]);
NSLog(@"最后一個元素:%@", [tuple last]);
三、學習了Signal和Tuple后葛账,可以用RAC遍歷數(shù)組信息柠衅,不用寫for了
/* 遍歷數(shù)組 */
NSArray *array = @[@"1", @"2", @"3", @"4", @"5"];
[array.rac_sequence.signal subscribeNext:^(id _Nullable x) {
NSLog(@"數(shù)組內(nèi)容:%@", x); // x 可以是任何對象
}];
/* 遍歷字典 */
NSDictionary *dictionary = @{@"key1":@"value1", @"key2":@"value2", @"key3":@"value3"};
[dictionary.rac_sequence.signal subscribeNext:^(RACTuple * _Nullable x) {
RACTupleUnpack(NSString *key, NSString *value) = x; // x 是一個元祖,這個宏能夠?qū)?key 和 value 拆開
NSLog(@"字典內(nèi)容:%@:%@", key, value);
}];
未完待續(xù)