首页 > 解决方案 > 为什么 Observer 在观察值变为 nil 时不发出事件?

问题描述

我正在尝试观察我的可变用户。当我为其设置一个不是 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)

标签: swiftobservablerx-swift

解决方案


您已将闭包传递给 Observable.create。每个订阅(驱动器)都会调用该闭包一次。该闭包会发出当前值,UserDefaults.user而不是其他任何东西。没有再次调用您的驱动器的原因是因为您传递给 create 函数的闭包不再执行。

你没有告诉我们是什么UserDefaults.user,但如果你的想法是跟踪存储的用户默认值,你可以使用观察函数来做到这一点。喜欢:

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

推荐阅读