在RxCocoa/RxSwift中,如何观察BehaviorRelay<[object]>数组大小的变化

In RxCocoa/RxSwift, how to observe BehaviorRelay<[object]> array size changed

我想订阅 BehaviorRelay<[object]>,并且我想在我们添加或删除元素时执行一些函数。

我使用了 distinctUntilChange 方法

BehaviorRelay<[object]>.asObservable().distinctUntilChanged{ [=11=].count != .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{ [=10=].count == .count}
    .subscribe{....}