轻松存储和检索您超棒的 Codable
对象。CodablePersist
为您提供了一种便捷的方式,可以将您的对象存储在磁盘、UserDefaluts 和内存中,并轻松地管理它们。
Codable
类型。为了快速向您展示 CodablePersist
的实用性,请考虑以下用例
class PostFetcher {
typealias Handler = (Result<Post, Error>) -> Void
private let cache = DiskStorage<Post>(storeName: "postStorage")
func fetchPost(withID id: Post.ID, then handler: @escaping Handler) {
// check if the post is cached or not
if let cached = cache[id] { return handler(.success(cached)) }
// if not cached fetch it from the backend
performFetching { [weak self] result in
// load post and cache it
let post = try? result.get() post.map { self?.cache[id] = $0 }
//then return the result
handler(result)
}
}
}
CodablePersist 可以通过 CocoaPods 获得。要安装
它,只需将以下行添加到您的 Podfile 中
pod 'CodablePersist'
Carthage 是一个去中心化的依赖管理器,它构建您的依赖项并为您提供二进制框架。
要使用 Carthage 将 CodablePersist 集成到您的 Xcode 项目中,请在您的 Cartfile
中指定它
github "engali94/CodablePersist"
运行 carthage update
来构建框架,并将构建的 CodablePersist.framework
拖到您的 Xcode 项目中。
在您的应用程序目标的“Build Phases”设置选项卡上,单击“+”图标并选择“New Run Script Phase”,然后按照 Carthage 入门指南的步骤 4、5 和 6 中提到的方式添加 Framework 路径
要使用 Apple 的 Swift Package Manager 进行集成,请将以下内容作为依赖项添加到您的 Package.swift
中
dependencies: [
.package(url: "https://github.com/engali94/CodablePersist.git", from: "0.1")
]
接下来,将 CodablePersist
添加到您的目标中,如下所示
.target(
name: "YOUR_TARGET_NAME",
dependencies: [
"CodablePersist",
]
),
然后运行 swift package update
来安装该包。
或者,导航到您的 Xcode 项目,选择 Swift Packages
并单击 +
图标来搜索 CodablePersist
。
如果您不想使用上述任何依赖项管理器,您可以手动将 CodablePersist 集成到您的项目中。只需将 Sources
文件夹拖到您的 Xcode 项目中即可。
确保您的类型符合 Identifiable
协议,并分配一个唯一的 idKey
属性,如下所示
struct Post: Codable, Identifiable {
// Identifiable conformance
static var idKey = \Post.id
var title: String
var id: String // should be unique per post
}
DiskStorage
:我们可以通过传递 storeName
和 expiryDate
来初始化一个 Disk Storage
let storage = try? DiskStorage<Post>(storeName: storageName, expiryDate: .minutes(interval: 10))
UserDefalutsStorage
:同样,我们可以通过传递 storeName
和 expiryDate
来初始化 UserDefaults Storage
let storage = UserDefaultsStorage<Post>(storeName: storageName, expiryDate: .minutes(interval: 10))!
MemoryStorage
:应该谨慎使用此方法,如果发生任何内存负载,系统将删除部分或全部对象以释放内存。 考虑使用 DiskStorage
或 UserDefalutsStorage
进行长期持久化。 我们可以初始化``
let storage = MemoryStorage<Post>(expiryDate: .minutes(interval: 10))
现在一切就绪...您可以持久化、检索和删除您的 Codable
对象 😎
let singlePost = Post(title: "I'm persistable", id: 1)
let posts: [Post] = [Post(title: "I'm persistable2", id: 2), Post(title: "I'm persistable3", id: 3)]
//Save a single object
try? storage.save(singlePost)
// Save single object by subscript
storage[1] = singlePost
//Save mutliple objects
try? storage.save(posts)
// fetch single object
let post1 = try? storage.fetchObject(for: 1)
// fetch by subscript
let post2 = storage[2]
// fetch multiple objects
let multiPosts = try? storage.fetchObjects(for: [3,2])
// fetch all objects in the store sorted by date ascendingly
let allObjets = try? storage.fetchAllObjects(descending: false)
// fetch only objects saved in las ten minutes
// ------(10)++++++(now) -> will only returns ++++++
let obejetsAfterTenMin = try? storage.fetchObjectsStored(inLast: .minutes(interval: 10)
// fetch object stored before the last 10 minutes
// ++++++(10)------(now) -> will only returns ++++++
let obejetsBeforeTemMin = try? storage.fetchObjectsStored(before: .minutes(interval: 10))
// check if an object exists in the storage
storage.contains(2)
// check the number of objects in the storage
storage.objectsCount
// delete a single object
try? storage.deleteObject(forKey: singlePost.id)
// delete a single object by subscript
storage[singlePost.id] = nil
// delete multiple posts
try? storage.deleteObjects(forKeys: [2,3])
// delete all objects
try? storage.deleteAll()
// Delete expired objects
storage.deleteExpired()
热烈欢迎您的贡献🙌
CodablePesist 在 MIT 许可证下发布。有关更多信息,请参阅 LICENSE。