如何使用RxSwift订阅数组更改?

时间:2018-08-20 08:53:26

标签: swift rx-swift

我有一个简单的数组:

var similarObjects: [Objects] = []

以后我如何看他的变化

similarObjects = someArray

我尝试:(结果:下一个->完成)

_ = Observable.just(similarObjects)
     .subscribe({ event in
         return print(event.element)
     })

4 个答案:

答案 0 :(得分:1)

您可以通过将相似的对象作为中继来实现,例如

 //create a relay object for the array
    let similarObjects: BehaviorRelay<[Objects]> = BehaviorRelay(value: [])

    //subscribe to the chnages
    _ = similarObjects.subscribe(onNext: { (similarObjects) in
        //you will get them here
    }, onError: { (error) in
        //error
    }, onCompleted: {
        //completed
    }) {
        //do something when disposed
    }


    //now when you set the array like this
    similarObjects.accept(someArray) 

答案 1 :(得分:1)

内置的didSet解决方案可能是最好的,但是rxswift可以通过使用*Subject类型中的任何一种来解决此问题。

例如,如果您选择PublishSubject(开始为空,仅向订阅者发出新元素):

let similarObjectsSubject = PublishSubject<[Objects]>()

将值传递给主题:

similarObjectsSubject.onNext(similarObjects)

并在代码中的某处处理更改:

similarObjectsSubject.subscribe(onNext: { objects in
     // ...
})

答案 2 :(得分:1)

在对值进行添加,更新,删除或将新值分配给数组等操作后,可以使用BehaviorRelay来获取事件。

  var similarObjects = BehaviorRelay<[Object]>(value: [])

  similarObjects.subscribe(onNext: { (array) in
        print(array)
  }).disposed(by: disposeBag)

  similarObjects.accept(someArray)

答案 3 :(得分:1)

为了观察类似对象的变化,必须将其设置为Observable ...

类型。

因此,例如,您声明了likeObjects如下:

var similarObjects: PublishSubject<[Objects]> = PublishSubject<[Objects]>()

您可以通过以下方式订阅它:

similarObjects
   .asObservable()
   .subscribe(onNext:{
         print($0)
   }

当您要为其分配值时,可以使用onNext运算符

示例:

similarObjects.onNext(someArray)

通过调用onNext,将执行print($ 0)语句,请确保在调用onNext之前对您的Subject进行订阅。