如何在MVVM中存储api响应数据(非持久性)?

时间:2019-06-08 05:42:50

标签: ios swift mvvm model rx-swift

我正在尝试存储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)

1 个答案:

答案 0 :(得分:0)

您可以再创建一个服务(例如CredentialsService),并将令牌存储在BehaviorRelay中的该服务中。 CredentialsService可能是一个单例,并将作为依赖项注入到任何视图模型中。因此,结果是,任何视图模型都可以从特殊的CredentialsService接收令牌。