У меня есть простой массив:
var similarObjects: [Objects] = []
Как я могу видеть его изменения после:
similarObjects = someArray
Я пытаюсь: (результат: следующий -> полный)
_ = Observable.just(similarObjects)
.subscribe({ event in
return print(event.element)
})
4 ответа
Для того, чтобы наблюдать изменения для ваших похожих объектов, вы должны сделать его типа Observable ...
Так, например, вы объявляете подобные объекты следующим образом:
var similarObjects: PublishSubject<[Objects]> = PublishSubject<[Objects]>()
И вы можете подписаться на него:
similarObjects
.asObservable()
.subscribe(onNext:{
print($0)
}
И когда вы хотите присвоить ему значение, вы можете использовать оператор onNext
Примере:
similarObjects.onNext(someArray)
Вызывая onNext, оператор print ($ 0) будет выполнен, обязательно подпишитесь, прежде чем вызывать onNext для вашего Subject.
Вы можете сделать это, сделав подобные объекты в качестве реле, как
//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)
Похожие вопросы
Новые вопросы
swift
Swift - это безопасный, быстрый и выразительный язык программирования общего назначения, разработанный Apple Inc. для своих платформ и Linux. Swift с открытым исходным кодом. Используйте тег только для вопросов о языковых функциях или необходимости кода в Swift. Используйте теги [ios], [ipados], [macos], [watch-os], [tvos], [cocoa-touch] и [cocoa] для (не зависящих от языка) вопросов о платформах или фреймворках.