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

标签 ios swift xcode rx-swift rx-cocoa

我想订阅一个 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/

相关文章:

swift - 试图找出一种使用单个 UITableview 的不那么笨拙的方法

ios - 无法将数据从一个 View Controller 推送到 TableView Controller

objective-c - 使用另一个类的方法中的数据更新 View

ios - 我如何证明 ARC 正在运行?

ios - 如何检测 UITableView 上的触摸,到目前为止似乎没有任何效果?

ios - 使用 Swift 4 ping 网站或 IP 地址(或检查网站是否在线)?

ios - 通过 UITextView 高度限制字符

ios - 在 AWS 上设置解析服务器时出错

ios - 游戏中心沙盒问题

ios - cellForRowAt 在 childTableView 中不起作用