我想让视图控制器知道登录状态的每一个变化。我必须发出单音并订阅吗?
Singleton.swift
class Singleton {
static let shared = Singleton()
let isLogin: BehaviorRelay<Bool>
private init() {
isLogin = BehaviorRelay<Bool>(value: false)
}
}
SomeViewController
class SomeVc: UIViewController {
Sigleton.shared.isLogin.subscribe(.....)
}
不,你不需要Singleton…
以下是我在实际生产中使用的代码。这段代码在我的application(_:didFinishLaunchingWithOptions:)
方法中。
_ = UserDefaults.standard.rx.observe(String.self, "token")
.map { $0 ?? "" }
.filter { $0.isEmpty }
.bind(onNext: presentScene(animated: true) { _ in
LoginViewController.scene { $0.connect() }
})
当用户登录时,我将令牌保存在UserDefaults
中,当用户注销时,我将其删除。当用户注销时,上面的代码将显示我的LoginViewController
。
如果任何其他视图控制器需要跟踪用户的登录状态,它们也可以订阅令牌可观察对象。
presentScene(animated:_:)
函数和scene(_:)
方法都来自我的CLE库