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实现响应式编程的主要内容,如果未能解决你的问题,请参考以下文章

iOS基于KVO实现响应式编程之完结篇

iOS 函数响应式与中介模式自定义KVO

iOS 函数响应式与中介模式自定义KVO

iOS 中的链式编程函数式编程入门

mvvm

html 将以编程方式附加外部脚本文件的javascript代码片段,并按顺序排列。用于响应式网站,其中ma