代码之家  ›  专栏  ›  技术社区  ›  Aleksandr Maybach

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

  •  0
  • Aleksandr Maybach  · 技术社区  · 7 年前

    我有一个简单的数组:

    var similarObjects: [Objects] = []

    similarObjects = someArray

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

    _ = Observable.just(similarObjects)
         .subscribe({ event in
             return print(event.element)
         })
    
    4 回复  |  直到 7 年前
        1
  •  1
  •   mojtaba al moussawi    7 年前

    为了观察相似物体的变化,你必须使它的类型可观察。。。

    因此,例如,您声明类似对象如下:

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

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

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

    例子:

    similarObjects.onNext(someArray)
    

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

        2
  •  1
  •   kathayatnk    7 年前

    你可以把类似的物体作为接力器,比如

     //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) 
    
        3
  •  1
  •   pacification    7 年前

    可能是内置的 didSet 解决方案是最好的,但是rxswift可以通过使用 *Subject 类型。

    PublishSubject (以空开头,仅向订阅服务器发出新元素):

    let similarObjectsSubject = PublishSubject<[Objects]>()
    

    将值传递给主题:

    similarObjectsSubject.onNext(similarObjects)
    

    similarObjectsSubject.subscribe(onNext: { objects in
         // ...
    })
    
        4
  •  1
  •   Jaydeep Vora    6 年前

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

      var similarObjects = BehaviorRelay<[Object]>(value: [])
    
      similarObjects.subscribe(onNext: { (array) in
            print(array)
      }).disposed(by: disposeBag)
    
      similarObjects.accept(someArray)
    
    推荐文章