如何使用 RxSwift 订阅数组变化?

How to subscribe on array changes using RxSwift?

我有一个简单的数组:

var similarObjects: [Objects] = []

我怎样才能看到他的变化:

similarObjects = someArray

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

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

你可以通过将类似的对象作为中继来实现,比如

 //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) 

可能内置的 didSet 解决方案是最好的,但是 rxswift 可以使用任何 *Subject 类型来处理这个问题。

例如,如果您选择 PublishSubject(开始为空并且只向订阅者发送新元素):

let similarObjectsSubject = PublishSubject<[Objects]>()

将值传递给主题:

similarObjectsSubject.onNext(similarObjects)

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

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

您可以使用 BehaviorRelay 在值被操作时获取事件,如添加、更新、删除或将新值分配给数组。

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

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

  similarObjects.accept(someArray)

为了观察 similarObjects 的变化,您必须将其设为 Observable 类型...

例如,您声明 similarObjects 如下:

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

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

similarObjects
   .asObservable()
   .subscribe(onNext:{
         print([=10=])
   }

而当你想给它赋值时,你可以使用onNext运算符

示例:

similarObjects.onNext(someArray)

通过调用onNext,print($0) 语句将被执行,请确保在调用onNext 之前订阅您的主题..