我正在尝试存储API响应数据,该数据将由其他网络请求使用,在我的情况下,访问令牌将包含在标头中,用于任何后续API调用。我不需要,因为它会在登录时提供一个新的文件。因此,它不需要永久存储(认为是UserDefaults,Keychain,CoreData等。不必要)。 >
如何存储令牌,以便其他ViewModel可以访问该令牌,并在进行服务调用时将其作为参数传递?如果我的理解有误,请纠正我。
模型
// Response data object
struct Login: Codable {
let accessToken: String
let type: String
}
ViewModel
// Call login service upon button tap
let loginOutput = loginTapped
.filter { username, password in
username.count >= 4 && password.count >= 4
}
.flatMapLatest { username, password in
PostLoginService.build(User(username: username,
password: password))
.materialize()
}
.share()
let loginSuccess = loginOutput
.elements() // Return Observable<Login>
ViewController
// Subscribe to response output
viewModel.output.loginSuccess
.subscribe(onNext: { [weak self] response in
// Question:
// Call a method in ViewModel to store the response?
// How do I store this response object?
// Store in Model's Login struct?
})
.disposed(by: disposeBag)
答案 0 :(得分:0)
您可以再创建一个服务(例如CredentialsService
),并将令牌存储在BehaviorRelay
中的该服务中。 CredentialsService
可能是一个单例,并将作为依赖项注入到任何视图模型中。因此,结果是,任何视图模型都可以从特殊的CredentialsService
接收令牌。