测试已测试 | ✓ |
语言语言 | SwiftSwift |
许可 | MIT |
发布最新发布 | 2017年12月 |
SwiftSwift 版本 | 4.0 |
SPM支持 SPM | ✓ |
由 Macbook 维护。
什么是 CodableCache
?它是一个框架,允许对您的普通 Swift 结构体进行无缝的内存缓存和磁盘持久化。只需定义一个模型并使它符合 Codable – 您就可以使用 CodableCache
了。
Codable
的内容都能自动工作Codable
编码/解码器外,无需编写序列化器Codable Cache 是我之前的 LeanCache 框架的一个简易替代品,它通过指定符合 NSCoding
的泛型类型来进行支持。它提供了如 let x: NSNumber? = Cache
这样的工作流程,这仍然很好,但是编写 NSCoding
序列化器是个头疼的问题。因此,诞生了 CodableCache
。
要开始使用,只需导入 CodableCache,定义一个符合 codable 的模型,并开始编程。以下是一些使用 CodableCache 的几个示例。
import CodableCache
struct Person: Codable {
let name: String
let age: Double // kids are half ages if you recall 😜
}
final class PersonManager {
let cache: CodableCache<Person>
init(cacheKey: AnyHashable) {
cache = CodableCache<Person>(key: cacheKey)
}
func getPerson() -> Person? {
return cache.get()
}
func set(person: Person) throws {
cache.set(value: person)
}
}
let personManager = PersonManager(cacheKey: "myPerson")
try? personManager.set(value: MyPerson)
if let person = personManager.get() {
print(person.age)
}
import CodableCache
//...
struct TestData: Codable {
let testing: [Int]
}
func saveJSON() {
let json = """
{
"testing": [
1,
2,
3
]
}
"""
guard let data = json.data(using: .utf8) else {
return
}
let decodedTestData: TestData
do {
decodedTestData = try decoder.decode(TestData.self, from: data)
try codableCache.set(value: decodedTestData)
} catch {
// do something else
return
}
}
import CodableCache
final class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterDelegate {
let appSettings = CodableCache<Settings>(key: "com.myApp.settings")
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
if let settings = appSettings.get() {
doSomethingUseful(with: settings)
}
return true
}
// ...
}
import CodableCache
struct Person: Codable {
let name: String
let age: Double
}
// this data will not be purged by the system like .cachesDirectory would
let persistentPersonStorage = CodableCache<Person>(key: "myPerson", directory: .applicationSupportDirectory)
import CodableCache
final class GenericCache<Cacheable: Codable> {
let cache: CodableCache<Cacheable>
init(cacheKey: AnyHashable) {
self.cache = CodableCache<Cacheable>(key: cacheKey)
}
func get() -> Cacheable? {
return self.cache.get()
}
func set(value: Cacheable) throws {
try self.cache.set(value: value)
}
func clear() throws {
try self.cache.clear()
}
}
let myCache = GenericCache<MyType>(cacheKey: String(describing: MyType.self))
通常,我们可以使用像 CoreData、Realm 或 SQLite 这样的重量级工具,但这通常是过度杀伤。更常见的情况是我们只是基于一些 JSON 接口将一些本地状态进行备份 - 使用飞船在街区散步CodableCache
,我们采用不同的方法,允许您快速定义模型,跳过样板和序列化器,并开始以闪电般的速度保存您的数据。
CocoaPods 是 Cocoa 项目的依赖管理工具。您可以使用以下命令安装它
$ gem install cocoapods
CodableCache 需要 CocoaPods 1.1+ 来构建。
要使用 CocoaPods 将 CodableCache 集成到您的 Xcode 项目中,请在您的 Podfile
中指定它
use_frameworks!
target '<Your Target Name>' do
pod 'CodableCache'
end
然后,运行以下命令
$ pod install
Carthage是一个去中心化的依赖管理器,它构建您的依赖项并提供二进制框架。
您可以使用以下命令使用Homebrew安装Carthage:
$ brew update
$ brew install carthage
要使用Carthage将 CodableCache 集成到您的 Xcode 项目中,在您的 Cartfile
中指定它。
github "asowers1/CodableCache" "master"
运行
carthage update
在您的应用程序的目标中,在“通用”选项卡下的“链接框架和库”部分,从由carthage update
生成的 Carthage/Build/iOS 目录中拖放 CodableCache-iOS.framework。
Swift 包管理器是一个用于自动分发 Swift 代码的工具,并集成到 swift
编译器中。它处于早期开发阶段,但 Alamofire 支持其在支持平台上的使用。
一旦您设置了 Swift 包,将 CodableCache 添加为依赖项就像将它添加到您的 Package.swift
的 dependencies
值一样简单。
dependencies: [
.Package(url: "https://github.com/asowers1/CodableCache.git")
]
请随意提交问题或拉取请求 – 我会很乐意提供帮助。