当观察值变为零时,为什么观察者不发出事件?

时间:2019-05-03 23:28:05

标签: swift observable rx-swift

我正在尝试观察变量用户。当我给它设置一个新的值nil时,我的驱动器(onNext)被调用,但是当我将用户变量设置为nil时,不调用drive(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 个答案:

答案 0 :(得分:1)

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

您没有告诉我们UserDefaults.user是什么,但是如果您想跟踪存储的用户默认值,则可以使用watch函数来实现。喜欢:

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