Возьмите следующий сервис в качестве примера
import Foundation
import PromiseKit
protocol ProfileServiceType {
func fetchCurrentUser() -> Promise<Profile>
}
struct ProfileService: ProfileServiceType {
private let httpClient: HTTPClientProtocol
init(httpClient: HTTPClientProtocol) {
self.httpClient = httpClient
}
func fetchCurrentUser() -> Promise<Profile> {
return httpClient.call(endpoint: ProfilesEndpoint.byUserId, method: .get, urlParams: nil, queryParams: nil, bodyParams: nil)
}
}
Когда я выбираю для текущего пользователя, я возвращаю его профиль, например, у меня есть несколько сцен в моем приложении, которые могут нуждаться в некотором аспекте пользователяпрофиль, например их userId
.Каждый раз, когда я обращаюсь к этому методу, он отправляет сетевой запрос.Поскольку этот вызов выполняется при первом запуске моего приложения, я могу с некоторой гарантией сказать, что я получу эти данные уже до того, как это понадобится любым другим сценам или службам.
Я думал что-то подобное, но потом ямне нужно было бы реализовать одноэлементный шаблон, который, я считаю,
var cachedProfile: Profile?
func fetchCurrentUser() -> Promise<Profile> {
return Promise<Profile> { [weak self] seal in
return httpClient.call(endpoint: ProfilesEndpoint.byUserId, method: .get, urlParams: nil, queryParams: nil, bodyParams: nil)
.done { (value: Profile) in
self?.cachedProfile = value
seal.fulfill(value)
}.catch { err in
seal.reject(err)
}
}
}
Недавно пришедший из F / E-разработки и активно использующий Redux, это для меня новость, и я не совсем уверен, когда имею дело с разработкой для iOS.