У меня есть простой массив:

var similarObjects: [Objects] = []

Как я могу видеть его изменения после:

similarObjects = someArray

Я пытаюсь: (результат: следующий -> полный)

_ = Observable.just(similarObjects)
     .subscribe({ event in
         return print(event.element)
     })
0
Aleksandr Maybach 20 Авг 2018 в 11:53

4 ответа

Лучший ответ

Для того, чтобы наблюдать изменения для ваших похожих объектов, вы должны сделать его типа Observable ...

Так, например, вы объявляете подобные объекты следующим образом:

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

И вы можете подписаться на него:

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

И когда вы хотите присвоить ему значение, вы можете использовать оператор onNext

Примере:

similarObjects.onNext(someArray)

Вызывая onNext, оператор print ($ 0) будет выполнен, обязательно подпишитесь, прежде чем вызывать onNext для вашего Subject.

1
mojtaba al moussawi 20 Авг 2018 в 10:03

Вы можете сделать это, сделав подобные объекты в качестве реле, как

 //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
kathayatnk 20 Авг 2018 в 09:07

Возможно, встроенное решение didSet является лучшим, но rxswift может справиться с этим, используя любой из типов *Subject.

Например, если вы выберете PublishSubject (начинается пусто и выдает подписчикам только новые элементы):

let similarObjectsSubject = PublishSubject<[Objects]>()

Передайте значение предмету:

similarObjectsSubject.onNext(similarObjects)

И обрабатывать изменения где-то в коде:

similarObjectsSubject.subscribe(onNext: { objects in
     // ...
})
1
pacification 20 Авг 2018 в 09:13

Вы можете использовать BehaviorRelay для получения события, когда значение манипулируется, например, Добавить, Обновить, Удалить или назначить новое значение массиву.

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

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

  similarObjects.accept(someArray)
1
Jaydeep 13 Мар 2019 в 10:08
51927218