如何在RxSwift中观察对象的属性?

3

I have the following 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"
    }

}

我试图观察ForecastViewModelforecast对象的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 块。

我应该如何观察这个类的属性?

1个回答

1

实际上,您应该将currentTemperature声明为变量以观察其值的变化。您的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()
    }

}

2
有没有可能在不将其声明为变量的情况下完成它?我想要一个与rx代码无关的模型类。 - 0rt
我不这么认为。一种方法是在ForecastViewModel内部创建它,并在ForecastViewModelinit中从forecast模型初始化其值。然后在其.subscribe回调中,更新forecast模型中的值。 - Kamran

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接