gpt4 book ai didi

ios - 如何使用 ReactiveCocoa 处理无效 token

转载 作者:行者123 更新时间:2023-11-30 14:17:06 28 4
gpt4 key购买 nike

我想知道处理来自服务器的无效 token 的正确方法是什么。

  1. 我想到的第一个解决方案是在 ViewModel 层中启动一个事件,在 rootViewController 导航到登录页面时监听该事件。

  2. 第二个解决方案(第一个解决方案有效,但我真的不喜欢事件,我想使用信号而不是事件),在rootViewController中添加authenticationViewModel,订阅invalidToken(或在 View 层中将其称为注销信号) ) rootViewController 中的信号,api 调用中触发信号。

请问有没有更好的办法来处理这个问题?

最佳答案

该示例基于 RAC3,我不知道这是否是最佳解决方案,但这是我经过一番尝试后得出的结果。

我将身份验证 token 作为 MutableProperty 存储在 View 模型中,并在 View Controller 中观察有效和无效的 token 。

类似这样的事情:

查看模型:

class LoginViewModel {

let username = MutableProperty<String>("")
let password = MutableProperty<String>("")
let authToken = MutableProperty<String>("")
let invalidToken = MutableProperty<String>("")
private let _inputValid = MutableProperty(false)

var action:Action<AnyObject?, String, NSError>?
var cocoaAction:CocoaAction?

init() {
let validation: Signal<String, NoError> -> Signal<Bool, NoError> = map { string in
return count(string) > 0
}

_inputValid <~ combineLatest(
username.producer
|> validation,
password.producer
|> validation)
|> map({ user, pass in return user && pass })

action = Action(enabledIf:_inputValid) { _ in
return LoginService().login(self.username.value, password: self.password.value) }
cocoaAction = CocoaAction(action!, input: nil)
action!.values.observe(next: { self.authToken.put($0) })
action!.errors.observe(next: { self.invalidToken.put($0)})
}
}

在ViewController中你可以观察authToken和invalidToken:

viewModel.authToken.producer
|> filter { count($0) > 0 }
|> start(next: {
_ in
// do something in case token is ok
})

viewModel.invalidToken.producer
|> filter { count($0) > 0 }
|> start(next: {
_ in
// do something in case token is NOT ok
})

如果您的用户名和密码是文本字段,您可以将输入映射到相应的 View 模型,如下所示

viewModel.username <~ userNameTextField.rac_textSignal().toSignalProducer() |> map { $0 as? String ?? "" } |> catch { _ in SignalProducer<String, NoError>.empty }
viewModel.password <~ passwordTextField.rac_textSignal().toSignalProducer() |> map { $0 as? String ?? "" } |> catch { _ in SignalProducer<String, NoError>.empty }

关于ios - 如何使用 ReactiveCocoa 处理无效 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31005991/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com