ReactiveObjC简单实用看我就够了

   ReactiveObjC是GitHub上一个开源的已经停止维护的响应式编程框架。原作者已从ReactiveObjC转向做RXSwift的开发。
   学习RAC,要先从MVVM入手,RAC作为ViewModel和Controller的粘合剂使用,能够用更少的代码完成更高效的工作。

   RAC的整体流程:创建信号 - 订阅信号 - 发送信号。没有订阅信号也就不会被创建。Block是OC的知识点,swift中为闭包。RAC绝大部分都是有Block来完成订阅后的消息处理机制。

一、RACSignal (信号)的创建、订阅

#一、创建信号,将事件转换成信号
RACSignal *signal = [RACSignal createSignal:^RACDisposable * _Nullable(id  _Nonnull subscriber) {
    
    /* 触发后 发送信号 */
    [subscriber sendNext:@"被触发,发送信号"];
    
    return nil;
}];
RACDisposable *disposable = [signal subscribeNext:^(id  _Nullable x) {
    
    NSLog(@"信号内容:%@", x);
}];

/*取消信号订阅*/
[disposable dispose];

二、RACTuple(元组),类似Swift的元组,但这里只是数组的扩展组合

/* 熟悉Swift的可以跳过元组认识 */
/* 创建元祖 */
RACTuple *tuple = [RACTuple tupleWithObjects:@"1", @"2", @"3", @"4", @"5", nil];

/* 从别的数组中获取内容 */
RACTuple *tuple = [RACTuple tupleWithObjectsFromArray:@[@"1", @"2", @"3", @"4", @"5"]];

/* 利用 RAC 宏快速封装 */
RACTuple *tuple = RACTuplePack(@"1", @"2", @"3", @"4", @"5");

NSLog(@"取元祖内容:%@", tuple[0]);
NSLog(@"第一个元素:%@", [tuple first]);
NSLog(@"最后一个元素:%@", [tuple last]);

三、学习了Signal和Tuple后,可以用RAC遍历数组信息,不用写for了

/* 遍历数组 */
NSArray *array = @[@"1", @"2", @"3", @"4", @"5"];
[array.rac_sequence.signal subscribeNext:^(id  _Nullable x) {
    
    NSLog(@"数组内容:%@", 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 是一个元祖,这个宏能够将 key 和 value 拆开
    NSLog(@"字典内容:%@:%@", key, value);
}];

未完待续

你可能感兴趣的:(ReactiveObjC简单实用看我就够了)