Observable<String?> 仅在第一次运行
Observable<String?> runs only first time
我的结构,
internal struct KeychainManager {
static private(set) var accessToken: String? = nil
}
我的UI绑定代码,
override func viewDidLoad() {
super.viewDidLoad()
let observableToken = Observable.just(KeychainManager.accessToken)
observableToken
.debug()
.map { [=12=] == nil }
.bind(to: authenticateButton.rx.isEnabled)
.disposed(by: disposeBag)
}
当我的应用程序打开时,可以看到 authenticateButton
已启用,但是当我调用 API 然后在 KeychainManager.accessToken
中成功保存我的令牌后,authenticateButton
仍然存在启用。为什么?
这里出了什么问题?
任何建议都会有所帮助。
. just
接受一个参数并将其作为 .next
发送,然后在 .next
之后立即发送 .completed
。这意味着 .just
只调用了一次。但是你真的需要观察 accessToken
值的每一次变化。两种实现方式:
- 通过使用通知:post 更改时通知并使用 rx 通知包装器处理更改;
- 使用
*Subject
中的任何一个。在这种情况下,在设置 accessToken
之后,您应该手动调用 subject.onNext(accessToken)
(发送 accessToken
更改的事件)并在您的控制器中处理此 subject
。
我的结构,
internal struct KeychainManager {
static private(set) var accessToken: String? = nil
}
我的UI绑定代码,
override func viewDidLoad() {
super.viewDidLoad()
let observableToken = Observable.just(KeychainManager.accessToken)
observableToken
.debug()
.map { [=12=] == nil }
.bind(to: authenticateButton.rx.isEnabled)
.disposed(by: disposeBag)
}
当我的应用程序打开时,可以看到 authenticateButton
已启用,但是当我调用 API 然后在 KeychainManager.accessToken
中成功保存我的令牌后,authenticateButton
仍然存在启用。为什么?
这里出了什么问题?
任何建议都会有所帮助。
. just
接受一个参数并将其作为 .next
发送,然后在 .next
之后立即发送 .completed
。这意味着 .just
只调用了一次。但是你真的需要观察 accessToken
值的每一次变化。两种实现方式:
- 通过使用通知:post 更改时通知并使用 rx 通知包装器处理更改;
- 使用
*Subject
中的任何一个。在这种情况下,在设置accessToken
之后,您应该手动调用subject.onNext(accessToken)
(发送accessToken
更改的事件)并在您的控制器中处理此subject
。