Я работаю с API, который иногда довольно медленный, но я знаю, что для каждого уникального URL я всегда получу один и тот же JSON ответ. Итак, идеально подходит для постоянного хранения в кеше, чтобы, по крайней мере, в следующий раз, когда вы откроете приложение, оно было там мгновенно.
Выглядит так просто, но не работает, как ожидалось.
import Alamofire
class ViewModel {
private let sessionManager: SessionManager
init() {
let configuration = URLSessionConfiguration.default
configuration.requestCachePolicy = .returnCacheDataElseLoad
configuration.urlCache = URLCache(memoryCapacity: 20 * 1024 * 1024, diskCapacity: 200 * 1024 * 1024, diskPath: "cache")
configuration.timeoutIntervalForRequest = 15
sessionManager = Alamofire.SessionManager(configuration: configuration)
}
func getData() {
print("START!")
let url = URL(string: "https://www.example.com/data/2020.json")!
let signature = "ABC"
let request = sessionManager.request(url, headers: ["Signature": signature]).validate()
let task = request.responseJSON { response in
print("DONE!")
}
}
}
Он выполняет запрос, и я получаю "СДЕЛАНО!" Ответ очень хороший, но он все равно занимает много много секунд, даже когда я запускаю функцию getData
несколько раз. Почему он не сразу возвращает кэшированный ответ?
Ответ имеет заголовок Cache-Control
со значением private,max-age=31536000
.
Я использую Alamofire 4.9.1.