Observable <string?>仅在第一次运行

时间:2018-04-09 11:16:49

标签: swift observable rx-swift

我的结构,

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 { $0 == nil }
        .bind(to: authenticateButton.rx.isEnabled)
        .disposed(by: disposeBag)
}

当我的应用打开时,可以看到authenticateButton已启用,但是当我进行API调用后,在KeychainManager.accessToken成功保存令牌后,authenticateButton仍然保持启用状态。为什么呢?

这里出了什么问题?

任何建议都会有所帮助。

1 个答案:

答案 0 :(得分:1)

. just接受一个论点并将其作为.next发送,然后在.completed之后发送.next。这意味着.just只调用一次。但是你需要真正观察accessToken值的每一个变化。实现这一目标的两种方法:

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