如何在 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的属性?

实际上你应该声明 currentTemperatureVariable 来观察值的变化。你的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()
    }

}