swift - 为什么 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)
解决方案
您已将闭包传递给 Observable.create。每个订阅(驱动器)都会调用该闭包一次。该闭包会发出当前值,UserDefaults.user
而不是其他任何东西。没有再次调用您的驱动器的原因是因为您传递给 create 函数的闭包不再执行。
你没有告诉我们是什么UserDefaults.user
,但如果你的想法是跟踪存储的用户默认值,你可以使用观察函数来做到这一点。喜欢:
let savedString = UserDefaults.standard.rx.observe(String.self, "myString")
推荐阅读
- eclipse - 使用 Ecoreutil.Copier 复制的对象的结果哈希码与原始哈希码不同
- http - HTTP-Long Polling 保持活动和握手
- python - 从 python 中的网站获取特定值
- javascript - React Native this.state.questions.map() 不是函数
- react-native - React Native - 如何像 iOS 或 instagram 一样进行模糊视图?
- javascript - (jQuery) 不能多次附加同一个对象
- http - cookie 是如何物理存储的?
- django - 生成AZ,链接到同一个ClassBasedView并进行搜索
- flutter - Flutter 自定义画家类
- html - 在滑块中拟合视频(Bootstrap 4.0)