如何在 RxSwift 中观察对象的 属性?
How to observe object's property in RxSwift?
我有以下 Forecast
class:
class Forecast {
let city: City
var currentTemperature: String {
didSet {
print("cur tepm was set to \(currentTemperature)")
}
}
init(city: City) {
self.city = city
self.currentTemperature = "0"
}
func loadForecast() {
self.currentTemperature = "+10"
}
}
我正在尝试观察 ForecastViewModel
中 forecast
对象的 currentTemperature
属性
class ForecastViewModel {
fileprivate let variableForecast: Variable<Forecast>
var navigationTitle: Observable<String> {
return Observable.just("No name")
}
init(forecast aForecast: Forecast) {
self.variableForecast = Variable(aForecast)
self.variableForecast.asObservable().subscribe(onNext: { (s) in
print(s.currentTemperature)
})
variableForecast.value.currentTemperature = "-15"
variableForecast.value.loadForecast()
}
}
然而,subscribe on next 中的代码只执行一次并打印 0。didSet
块每次都被调用。
我该如何观察这个class的属性?
实际上你应该声明 currentTemperature
为 Variable
来观察值的变化。你的Forecast
会变成这样
class Forecast {
let city: City
var currentTemperature: Variable<String> = Variable("0")
init(city: City) {
self.city = city
}
func loadForecast() {
self.currentTemperature.value = "+10"
}
}
现在您可以订阅收听 currentTemperature
中的更改,如下所示,
class ForecastViewModel {
fileprivate let variableForecast: Variable<Forecast>
var navigationTitle: Observable<String> {
return Observable.just("No name")
}
init(forecast aForecast: Forecast) {
self.variableForecast = Variable(aForecast)
self.variableForecast.value.currentTemperature.asObservable().subscribe(onNext: { (value) in
print(value)
})
variableForecast.value.currentTemperature.value = "-15"
variableForecast.value.loadForecast()
}
}
我有以下 Forecast
class:
class Forecast {
let city: City
var currentTemperature: String {
didSet {
print("cur tepm was set to \(currentTemperature)")
}
}
init(city: City) {
self.city = city
self.currentTemperature = "0"
}
func loadForecast() {
self.currentTemperature = "+10"
}
}
我正在尝试观察 ForecastViewModel
forecast
对象的 currentTemperature
属性
class ForecastViewModel {
fileprivate let variableForecast: Variable<Forecast>
var navigationTitle: Observable<String> {
return Observable.just("No name")
}
init(forecast aForecast: Forecast) {
self.variableForecast = Variable(aForecast)
self.variableForecast.asObservable().subscribe(onNext: { (s) in
print(s.currentTemperature)
})
variableForecast.value.currentTemperature = "-15"
variableForecast.value.loadForecast()
}
}
然而,subscribe on next 中的代码只执行一次并打印 0。didSet
块每次都被调用。
我该如何观察这个class的属性?
实际上你应该声明 currentTemperature
为 Variable
来观察值的变化。你的Forecast
会变成这样
class Forecast {
let city: City
var currentTemperature: Variable<String> = Variable("0")
init(city: City) {
self.city = city
}
func loadForecast() {
self.currentTemperature.value = "+10"
}
}
现在您可以订阅收听 currentTemperature
中的更改,如下所示,
class ForecastViewModel {
fileprivate let variableForecast: Variable<Forecast>
var navigationTitle: Observable<String> {
return Observable.just("No name")
}
init(forecast aForecast: Forecast) {
self.variableForecast = Variable(aForecast)
self.variableForecast.value.currentTemperature.asObservable().subscribe(onNext: { (value) in
print(value)
})
variableForecast.value.currentTemperature.value = "-15"
variableForecast.value.loadForecast()
}
}