Как наблюдать свойство объекта в RxSwift? - PullRequest
0 голосов
/ 23 июня 2018

У меня есть Forecast класс:

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"
    }

}

Я пытаюсь наблюдать currentTemperature свойство forecast объекта в ForecastViewModel

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()
    }

}

Однако код подписки на next выполняется только один раз и печатает 0. didSet блок вызывается каждый раз.

Как я должен наблюдать свойство этого класса?

1 Ответ

0 голосов
/ 23 июня 2018

На самом деле вы должны объявить 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()
    }

}
...