iOS 通过KVO实现响应式编程
Posted 张三的程序生活
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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<id> *)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];
});
上面的是单元测试代码,基本可以看出来如何使用。
pod 集成命令:pod 'JKKVOHelper'
欢迎大家多多批评指正。
交流问题可以QQ扫描下方二维码进群
————————————————
以上是关于iOS 通过KVO实现响应式编程的主要内容,如果未能解决你的问题,请参考以下文章