如何使用 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 之前订阅您的主题..
我有一个简单的数组:
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 之前订阅您的主题..