6bf911930b605828d6701c92b536872e
SwiftUI 载入URL网络图片和缓存 (教程含源码)

实战需求

SwiftUI 载入URL网络图片和缓存

本文价值与收获

看完本文后,您将能够作出下面的界面

载入URL网络图片和缓存

载入URL网络图片和缓存

看完本文您将掌握的技能


基础知识

URLCache

将URL请求映射到缓存的响应对象的对象。

class URLCache : NSObject

总览

本URLCache类实现对URL负载请求的响应缓存,通过映射NSURLRequest对象的对象。它提供了内存中和磁盘上缓存的组合,并允许您操纵内存和磁盘上部分的大小。您还可以控制持久存储缓存数据的路径。CachedURLResponse

注意,在iOS中,当系统磁盘空间不足时(仅在您的应用未运行时),才可以清除磁盘缓存。

线程安全

在iOS 8和更高版本以及macOS 10.10和更高版本中,URLCache线程安全。

尽管URLCache可以同时从多个执行上下文中安全地调用实例方法,但是请注意,尝试读取或写入同一请求的响应时,方法会像一样, 并且具有不可避免的竞争条件。cachedResponse(for:)storeCachedResponse(_:for:)的子类URLCache必须以这种线程安全的方式实现重写的方法。

子类

但是当你有特定的需求,你可以继承它。例如,出于安全性或其他原因,您可能要筛选要缓存的响应,或者重新实现存储机制。

当覆盖此类的方法时,请注意,带有task参数的方法比不带参数的方法更受系统青睐。因此,在子类化时,您应覆盖基于任务的方法,如下所示:

在缓存中存储响应-替代基于任务的请求或替代基于任务的任务。
storeCachedResponse(_:for:)storeCachedResponse(_:for:)

从缓存获取响应-替代或替代。
getCachedResponse(for:completionHandler:)cachedResponse(for:)

删除缓存的响应-替代基于任务的请求或替代基于任务的任务。
removeCachedResponse(for:)removeCachedResponse(for:)


实战代码

```
import SwiftUI

struct ImageWithURL: View {

top Created with Sketch.