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];
        });

上面的是單元測試代碼,基本可以看出來如何使用。
源碼下載地址:https://github.com/xindizhiyin2014/JKKVOHelper.git

pod 集成命令:pod 'JKKVOHelper'

歡迎大家多多批評指正。
交流問題可以QQ掃描下方二維碼進羣
在這裏插入圖片描述
更多幹貨文章,歡迎掃描二維碼關注公衆號
這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章