如何使用 Alamofire 从缓存和网络加载数据?

Posted

技术标签:

【中文标题】如何使用 Alamofire 从缓存和网络加载数据?【英文标题】:How to load data BOTH from cache and from network using Alamofire? 【发布时间】:2020-11-24 10:46:22 【问题描述】:

我正在尝试使用缓存来使我的 ios 应用程序更加灵活。对于每个请求,我想做的是:

    从缓存中返回数据(如果存在) 如果连接到互联网,则在后台从 API 加载数据 如果来自 API 的数据与缓存中的数据不同,请更新缓存 并再次返回该数据,以便刷新 UI

我知道,如果缓存中已经有一些数据并且我已连接到 Internet,则可能会连续两次调用我的响应代码,但这就是我想要的:第一组数据,可能从缓存返回的 out-of-date 立即给了我一些东西,第二组数据确保一切都是最新的。

到目前为止,我使用的所有缓存方法只能让我实现仅基于缓存年龄的 EITHER/OR 方法。现在,我正在使用AlamofireURLCache5。是否可以使用 Alamofire 5 实现这样的缓存,还是必须手动实现?

编辑:有人告诉我我正在尝试做的事情称为 Stale-While-Revalidate 类型的缓存。

【问题讨论】:

嘿,那么你用什么方法来实现这一点?? 【参考方案1】:

Alamofire 仅支持URLCacheURLSession 提供的功能。你可以在 Alamofire 上实现等价的模式,也许是在从网络更新时保持最后一个成功值的类型。

顺便说一句,您可能不希望出现“如果连接到互联网”的情况。相反,您应该只请求资源并在成功时更新。

【讨论】:

以上是关于如何使用 Alamofire 从缓存和网络加载数据?的主要内容,如果未能解决你的问题,请参考以下文章

在 Alamofire 中检测缓存的响应

尝试使用 Alamofire 缓存但没有结果

AlamoFire 图像内存问题

让 Alamofire 和 OHHTTPStubs 一起工作

Alamofire 完成工作后如何加载视图?

UIView 在使用 SwiftyJSON 和 Alamofire 从 API 返回的数据之前被渲染