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 值的每一次变化。两种实现方式:

  1. 通过使用通知:post 更改时通知并使用 rx 通知包装器处理更改;
  2. 使用 *Subject 中的任何一个。在这种情况下,在设置 accessToken 之后,您应该手动调用 subject.onNext(accessToken)(发送 accessToken 更改的事件)并在您的控制器中处理此 subject