【问题标题】:RxSwift observe array change only when appended new elementRxSwift 仅在添加新元素时观察数组变化
【发布时间】:2018-06-09 17:08:29
【问题描述】:

有没有办法只在添加新元素时订阅数组更改?

所以我希望仅在添加新元素时执行以下闭包。

array.asObservable().subscribe(onNext: { array in

}).disposed(by: self.bag)

例如,如果从这个数组中删除一个元素,我不希望执行这个闭包。

编辑:

有没有办法只在闭包中添加新的元素?在我的例子中,我附加了不同长度的子序列,所以我不能只看闭包内数组的最后一个元素。

【问题讨论】:

    标签: ios swift rx-swift


    【解决方案1】:

    可能是这样的

     let array = Variable<[Int]>([])
            array.asObservable().distinctUntilChanged { $0.count > $1.count}.subscribe(onNext: {
                print($0)
            }).disposed(by: disposeBag)
    
            array.value.append(1) //called
            array.value.append(2) //called
            array.value.remove(at: 0) //not called
            array.value.append(3) //called
    

    【讨论】:

    • 不推荐使用变量以更好地使用 BehaviorRelay
    • 这是正确答案;但是,有没有办法只在闭包中添加新的元素?在我的例子中,我附加了不同长度的子序列,所以我不能只看闭包内数组的最后一个元素。
    • 你的意思是使用过滤器?你能展示你的数组的例子吗?
    • 例如。 var 数组 = [0,1,2];然后我这样做:array.append([3,4,5])。如何在订阅闭包中仅获取新附加的子序列,即 [3,4,5]
    【解决方案2】:

    在这种情况下,您应该使用变量辞职并使用主题。我认为,您的要求应该满足 PublishSubject:

    let subjectArray = PublishSubject<[Int]>([])
    array.asObservable().subscribe(onNext: {
                print($0)
            }).disposed(by: disposeBag)
    

    当您向 subjectArray 添加新元素时,只会打印新元素。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-16
      • 2021-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-22
      • 1970-01-01
      • 2022-01-20
      相关资源
      最近更新 更多