在 RxCocoa/RxSwift 中,如何观察 BehaviorRelay<[object]> 数组大小发生变化
Posted
技术标签:
【中文标题】在 RxCocoa/RxSwift 中,如何观察 BehaviorRelay<[object]> 数组大小发生变化【英文标题】:In RxCocoa/RxSwift, how to observe BehaviorRelay<[object]> array size changed 【发布时间】:2019-07-24 19:11:09 【问题描述】:我想订阅一个 BehaviorRelay,并且我想在我们追加或删除元素时执行一些函数。
我使用了 distinctUntilChange 方法
BehaviorRelay<[object]>.asObservable().distinctUntilChanged $0.count != $1.count.subscribe....
但是没有用。我应该尝试什么?我应该尝试使用其他主题或中继来实现此目的吗?
var objects = BehaviorRelay<[Object]>(value: [])
let disposeBag = DisposeBag()
objects.asObservable()
.subscribe(onNext: (objects) in
//Do something only when appending or removing elements.
).disposed(by: disposeBag)
//For example
let tempObj = objects.value
tempObj.append(newObj)
objects.accept(tempObj)//this will be called
tempObj.removeAll()
objects.accept(tempObj)//this will be called
tempObj.property = "Change Property"
objects.accept(tempObj)//this will NOT be called
【问题讨论】:
【参考方案1】:来自文档:
参数比较器:计算键值的相等比较器。
我相信您应该使用==
运算符检查相等性。所以,在你的情况下,试试这种方式:
BehaviorRelay<[object]>
.asObservable()
.distinctUntilChanged $0.count == $1.count
.subscribe....
【讨论】:
以上是关于在 RxCocoa/RxSwift 中,如何观察 BehaviorRelay<[object]> 数组大小发生变化的主要内容,如果未能解决你的问题,请参考以下文章