RxSwift 仅在添加新元素时观察数组变化
Posted
技术标签:
【中文标题】RxSwift 仅在添加新元素时观察数组变化【英文标题】:RxSwift observe array change only when appended new element 【发布时间】:2018-06-09 17:08:29 【问题描述】:有没有办法只在添加新元素时订阅数组更改?
所以我希望仅在添加新元素时执行以下闭包。
array.asObservable().subscribe(onNext: array in
).disposed(by: self.bag)
例如,如果从这个数组中删除一个元素,我不希望执行这个闭包。
编辑:
有没有办法只在闭包中添加新的元素?在我的例子中,我附加了不同长度的子序列,所以我不能只看闭包内数组的最后一个元素。
【问题讨论】:
【参考方案1】:可能是这样的
let array = Variable<[Int]>([])
array.asObservable().distinctUntilChanged $0.count > $1.count.subscribe(onNext:
print($0)
).disposed(by: disposeBag)
array.value.append(1) //called
array.value.append(2) //called
array.value.remove(at: 0) //not called
array.value.append(3) //called
【讨论】:
不推荐使用变量以更好地使用 BehaviorRelay 这是正确答案;但是,有没有办法只在闭包中添加新的元素?在我的例子中,我附加了不同长度的子序列,所以我不能只看闭包内数组的最后一个元素。 你的意思是使用过滤器?你能展示你的数组的例子吗? 例如。 var 数组 = [0,1,2];然后我这样做:array.append([3,4,5])。如何在订阅闭包中仅获取新附加的子序列,即 [3,4,5]【参考方案2】:在这种情况下,您应该使用变量辞职并使用主题。我认为,您的要求应该满足 PublishSubject:
let subjectArray = PublishSubject<[Int]>([])
array.asObservable().subscribe(onNext:
print($0)
).disposed(by: disposeBag)
当您向 subjectArray 添加新元素时,只会打印新元素。
【讨论】:
以上是关于RxSwift 仅在添加新元素时观察数组变化的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 RxSwift 观察 UITextField 中的文本变化?