【问题标题】:In RxCocoa/RxSwift, how to observe BehaviorRelay<[object]> array size changed在 RxCocoa/RxSwift 中,如何观察 BehaviorRelay<[object]> 数组大小发生变化
【发布时间】: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

【问题讨论】:

    标签: ios swift xcode rx-swift rx-cocoa


    【解决方案1】:

    来自文档:

    • 参数比较器:计算键值的相等比较器。

    我相信您应该使用== 运算符检查相等性。所以,在你的情况下,试试这种方式:

    BehaviorRelay<[object]>
        .asObservable()
        .distinctUntilChanged{ $0.count == $1.count}
        .subscribe{....}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-03
      • 1970-01-01
      相关资源
      最近更新 更多