Почему Observer не генерирует события, когда наблюдаемые значения становятся равными нулю? - PullRequest
1 голос
/ 04 мая 2019

Я пытаюсь наблюдать за моей переменной пользователя. Когда я устанавливаю ему новое значение, отличное от nil, вызывается мой диск (onNext), но когда я устанавливаю переменную пользователя как nil, диск (onNext) не вызывается. Это должно случиться? Чем это объясняется?

  static var userObservable: Observable<User?> = {
        Observable<User?>.create() { observer in
            observer.onNext(UserDefaults.user)

            return Disposables.create()
        }
    }()

UserDefaults.userObservable
            .asDriver(onErrorJustReturn: nil)
            .drive(onNext: {[weak self] user in
                print(user) // when UserDefaults.user receives a new value that is not nil this line of code is called. But when that value is nil it's not called.
            }).disposed(by: disposeBag)

1 Ответ

1 голос
/ 04 мая 2019

Вы передали закрытие в Observable.create.Это закрытие вызывается один раз для каждой подписки (диска). Это закрытие генерирует текущее значение UserDefaults.user и больше ничего.Причина, по которой ваш диск больше не вызывается, заключается в том, что закрытие, которое вы передали функции create, больше не выполняется.

Вы не сообщаете нам, что такое UserDefaults.user, но если идея состоит в том, чтобы отслеживать значениесохраненного пользовательского значения по умолчанию, вы делаете это с помощью функции наблюдения.Нравится:

let savedString = UserDefaults.standard.rx.observe(String.self, "myString")
...