Как сохранить данные ответов API (непостоянные) в MVVM? - PullRequest
0 голосов
/ 08 июня 2019

Я пытаюсь сохранить данные ответа API, которые будут использоваться другим сетевым запросом, в моем случае это токен доступа, который будет включен в заголовок для любого последующего вызова API.Мне не нужно , чтобы оно постоянно сохранялось (что считается UserDefaults, Keychain, CoreData и т. Д. не обязательно ), поскольку при входе в систему будет предоставлен новый файл.

Как мне сохранить токен, чтобы он мог быть доступен другим ViewModels и передавался в качестве аргумента при вызове службы?Пожалуйста, поправьте меня, если я неправильно понял.

Модель

// 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 голосов
/ 08 июня 2019

Вы можете создать еще один сервис (например, CredentialsService) и сохранить свой токен в этом сервисе в BehaviorRelay.CredentialsService может быть одноэлементным и будет внедрен в любую модель представления как зависимость.Таким образом, в результате любая модель представления будет иметь возможность получать токен от специального CredentialsService.

...