我正在尝试观察变量用户。当我给它设置一个新的值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)
答案 0 :(得分:1)
您已将闭包传递给Observable.create。每个订阅(驱动器)都会调用一次该闭包。该闭包将发出UserDefaults.user
的当前值,而不会发出其他任何值。之所以不会再次调用驱动器,是因为传递给create函数的闭包不再执行。
您没有告诉我们UserDefaults.user
是什么,但是如果您想跟踪存储的用户默认值,则可以使用watch函数来实现。喜欢:
let savedString = UserDefaults.standard.rx.observe(String.self, "myString")