目录
描述
SKCache 并不宣称在这一领域具有独特性,但它并不是另一个给你带来上帝力量的怪物库。它只做缓存,但它做得很好。
主要功能
- 支持 Swift 4.2、Swift 4 和 Swift 3.2。
- 磁盘存储是可选的。
- 支持
expiry
和过期对象的清理。 - 广泛覆盖单元测试
- iOS、tvOS 支持。
使用方法
存储
SKCache
是基于 NSCache
创建的,支持 Swift 中的所有有效类型。它具有内存存储,并可支持可选项的磁盘存储。内存存储应该更节省时间和内存,而磁盘存储用于超出应用程序生命周期内容,可以将其视为一种存储用户信息(这些信息应在应用程序启动之间持久化)的方便方式。
编码类型
SKCache
支持任何符合 Codable 协议的对象。您可以 自行定义符合 Codable 的协议,以确保可以通过 SKCache
保存和加载数据。
支持的类型包括:
- 原始类型,如
Int
、Float
、String
、Bool
等 - 原始类型的数组,如
[Int]
、[Float]
、[Double]
等 - 原始类型的集合,如
Set
、Set
等 - 简单的字典,如
[String: Int]
、[String: String]
等 日期
URL
数据
错误处理
错误处理是通过 try catch
实现的。SKCache
使用 Operations
抛出错误。
/// Enum to hold possible errors during execution of methods over SKCache
///
/// - fetchFail: Failed to fetch an object
/// - deletaFail: Failed to delete an object
/// - saveFail: Failed to save an object
/// - loadFail: Failed to load the SKCache
public enum Operations: Swift.Error {
case fetchFail
case deletaFail
case saveFail
case loadFail
}
可能存在错误,这是因为磁盘问题或保存/加载数据到/从设备存储时的类型不匹配。因此,如果您想要处理错误,您需要执行 try catch
do {
try SKCache.save()
} catch {
print(error)
}
do {
try SKCache.load()
} catch {
print(error)
}
配置
以下是设置一些配置选项的方法:
SKCache.elementsCount = 1000 // setup total count of elements saved into the cache
SKCache.elementsCostLimit = 1024 * 1024 // setup the cost limit of the cache
SKCache.shared.expiration = .everyDay // setup expiration date of each object in the cache
过期日期
默认情况下,所有保存的对象都具有与在 SKCache.shared.expiration
中指定的过期时间相同的过期时间。您可以通过在 SKObject
的构造函数中指定 expiry
来为特定对象覆盖此设置。
// Default expiry date from configuration will be applied to the item
let object = SKObject(value: "This is a string", key: "string")
// A given expiry date will be applied to the item
let object = SKObject(value: "This is a string", key: "string", expirationDate: ExpiryDate.everyDay.expiryDate())
添加/获取对象
如果您想添加或获取对象,只需按照以下简单步骤进行
//1. Create a SKObject
let object = SKObject(value: "This is a string", key: "string")
//2. Add it to the cache
SKCache.shared.add(object: object)
//3. Fetch an object from the cache
let string: String? = SKCache.shared.get(forKey: "string")
启用磁盘存储
从版本 1.3.0 开始,磁盘存储默认启用。无需调用额外方法来加载包含对象的缓存。引入了一个新的属性 isOnlyInMemory
来指示缓存对象是否将保存在磁盘空间中或保留在内存中。
安装
Cocoapods
SKCache 通过 CocoaPods 可用。要安装它,只需将以下行添加到您的 Podfile 中
pod 'SKCache'
作者
SKCache
由 Dev Labs 创建和维护。您可以在 @devlabsbg 或 devlabs.bg 找到我们
贡献
我们非常希望您为 SKCache 贡献,因此
- 如果您发现了一个错误,请开启一个问题
- 如果您有功能请求,请开启一个问题
- 如果您想要贡献,请提交一个拉取请求
许可证
SKCache 在 MIT 许可证下可用。请参阅LICENSE