我想订阅一个 BehaviorRelay<[object]>,并且我想在我们添加或删除元素时执行一些函数。
我使用了 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
最佳答案
来自文档:
- parameter comparer: Equality comparer for computed key values.
我相信您应该使用 ==
运算符检查相等性。因此,对于您的情况,请尝试这种方式:
BehaviorRelay<[object]>
.asObservable()
.distinctUntilChanged{ $0.count == $1.count}
.subscribe{....}
关于ios - 在 RxCocoa/RxSwift 中,如何观察 BehaviorRelay<[object]> 数组大小的变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57189755/