有关使用"Cacher"的详细信息,请参阅文章"在iOS中缓存任何内容"。
将Cacher/
文件夹拖放到您的项目中。
要快速查看TL;DR(话太多,不看),请查看位于CacherDemo
的示例项目。它将引导您完成可能最简单的缓存,并持久化字符串值。
如果您想自己动手做,请继续阅读,我们将详细解释这是如何工作的。
public protocol Cachable {
var fileName: String { get }
func transform() -> Data
}
这全部取决于这个简单的协议,它只有两个要求:fileName
表示在文件系统中存储的唯一名称,transform
表示您希望导入的数据的表示。利用Swift 4的Codable
的魔力,我们可以跳过transform
的实现并使用显式声明的这里的隐式实现。
在实现了对Cachable
和Codable
的合规性后,我们可以使用persist:item:completion
方法在文件系统中存储任何内容。
但是,让我们看看一个更复杂的示例
struct CachableMovies: Cachable, Codable {
let store: String
let movies: [Movie]
var fileName: String {
return "movies-\(store)"
}
init(store: String, movies: [Movie]) {
self.store = store
self.movies = movies
}
}
struct Movie: Codable {
enum CodingKeys : String, CodingKey {
case title = "movie_title"
case description = "movie_description"
case url = "movie_url"
}
let title: String
let description: String
let url: URL
}
上述代码就足以将电影集合存储到文件系统中。persist
方法。
Cacher(destination: .temporary).persist(item: CachableMovies(store: "USA", movies: myArrayOfMovies)) { url, error in
// Completion handler when the process finishes
}
Raul Riera,@raulriera