有人可以提供一个使用ReactiveCocoa抽象来实现如下的一行示例:
// pseudo-code NSMutableArray *array = @[[] mutableCopy]; RACSignal *newValue = RACAbleWithStart(array); // get whole array or maybe just added/removed element on push/pop [newValue subscribeNext:^(NSArray *x) { // x is whole array }] [newValue subscribeNext:^(id x) { // x is new value }] [newValue subscribeNext:^(id x) { // x is removed value }]
我看到NSArray的一些扩展被删除赞成Mantle https://github.com/ReactiveCocoa/ReactiveCocoa/pull/130但仍然找不到简单的NSArray操作的例子。
您不能观察数组以进行更改。 ReactiveCocoa使用键值观察。其中,顾名思义,仅注意到键控属性(字典成员,属性等)的更改。
您可以做的是观察数组属性进行更改:
@interface Blah : NSObject @property (copy,readonly) NSArray *arrayProperty; @end // later... Blah *blah = [Blah new]; [RACObserve(blah,arrayProperty) subscribeNext:^(NSArray *wholeArray){}];
如果你想知道哪些对象插入/删除,那么你有两个选择。您可以通过存储每个数组并将其与前一个数组进行比较来处理它。这是最简单的,但会对非常大的数组执行不良。 AFAIK,ReactiveCocoa没有内置操作来执行此操作。
或者您可以实现KVO collection accessors,并确保使用mutableArrayValueForKey:进行数组更改。这避免了每当进行任何更改时创建一个新数组,并通知观察者对mutableArrayValueForKey返回的代理数组所做的更改。
使用ReactiveCocoa观察更改信息稍微涉及:
RACSignal *changeSignal = [blah rac_valuesAndChangesForKeyPath:@keypath(blah,arrayProperty) options: NSKeyValueObservingOptionNew| NSKeyValueObservingOptionOld observer:nil]; [changeSignal subscribeNext:^(RACTuple *x){ NSArray *wholeArray = x.first; NSDictionary *changeDictionary = x.second; }];
更改字典会告诉您对数组进行了哪些更改,哪些对象被插入/删除,以及插入/删除的对象的索引。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。