iOS 通过KVO实现响应式编程(一)

  之前写了一篇文章《OC实现KVO监听block方式响应事件》可以实现通过KVO监听单一元素的变化。今天主要分析一下,通过KVO实现监听数组变化的实现方案。

监听数组变化,具体需要监听什么

一、监听数组指针的变化

(1) 数组指针由空到非空
(2) 数组指针由非空到空
(3) 数组指针非空到非空 ps:指针指向的对象不一样
  上面这三种情况主要是针对数组作为普通的NSObject对象来进行监听。这些情况都可以通过《OC实现KVO监听block方式响应事件》这篇文章中提供的方法进行监听。

二、监听数组元素变化

(1) 监听数组元素数量的变化,主要有:增加,删除,替换引起的变化
(2) 监听数组元素属性的变化
  目前我这边只实现了监听数组元素数量的变化,剩下的后续会进行持续的完善。
如果要实现监控数组元素数量的变化,那么需要使用如下的方法进行,数组元素的增加,删除,替换等操作,具体如下:


- (void)kvo_addObject:(id)anObject;
- (void)kvo_insertObject:(id)anObject atIndex:(NSUInteger)index;
- (void)kvo_removeLastObject;
- (void)kvo_removeObjectAtIndex:(NSUInteger)index;
- (void)kvo_replaceObjectAtIndex:(NSUInteger)index withObject:(id)anObject;

- (void)kvo_addObjectsFromArray:(NSArray *)otherArray;
- (void)kvo_exchangeObjectAtIndex:(NSUInteger)idx1 withObjectAtIndex:(NSUInteger)idx2;
- (void)kvo_removeAllObjects;
- (void)kvo_removeObject:(id)anObject;

具体使用如下:

 it(@"jk_addObject", ^{
            JKTeacher *teacher = [JKTeacher new];
            NSMutableArray *students = [NSMutableArray new];
            teacher.students = students;
            JKPersonModel *person1 = [JKPersonModel new];
            person1.name = @"1";
            __block BOOL invoked = NO;
            [teacher jk_addObserverForKeyPath:@"students" options:NSKeyValueObservingOptionNew withBlock:^(NSDictionary * _Nonnull change, void * _Nonnull context) {
                [[[change objectForKey:@"new"] should] haveCountOf:1];
                invoked = YES;
            }];
            [students kvo_addObject:person1];
            [[theValue(invoked) shouldEventually] beYes];
        });

上面的是单元测试代码,基本可以看出来如何使用。
源码下载地址:https://github.com/xindizhiyin2014/JKKVOHelper.git

pod 集成命令:pod 'JKKVOHelper'

欢迎大家多多批评指正。
交流问题可以QQ扫描下方二维码进群
iOS 通过KVO实现响应式编程(一)_第1张图片
更多干货文章,欢迎扫描二维码关注公众号
这里写图片描述

你可能感兴趣的:(IOS)