加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

反应可可 – ReactiveCocoa示例与NSMutableArray push/pop?

发布时间:2020-12-15 06:24:49 所属栏目:百科 来源:网络整理
导读:有人可以提供一个使用ReactiveCocoa抽象来实现如下的一行示例: // pseudo-codeNSMutableArray *array = @[[] mutableCopy];RACSignal *newValue = RACAbleWithStart(array); // get whole array or maybe just added/removed element on push/pop[newValue
有人可以提供一个使用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;
}];

更改字典会告诉您对数组进行了哪些更改,哪些对象被插入/删除,以及插入/删除的对象的索引。

记录在:https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Protocols/NSKeyValueObserving_Protocol/Reference/Reference.html

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读