UserDefaultsStore 2.0.0

UserDefaultsStore 2.0.0

Omar Albeik 维护。



Build Status Test Coverage Platforms Cocoapods Carthage compatible Swift Package Manager compatible Swift Xcode MIT

tl;dr

您喜欢 Swift 的 Codable 协议,并处处使用它,谁不喜欢呢!这里有一个简单而轻量级的方式,只用几行代码就能存储和检索 —— 一定数量的 😅 —— 的 Codable 对象!


介绍 v2.0

  • 替换了 Swift 的 Identifiable 协议。
  • 提高了部署目标到 iOS 13.0tvOS 13.0macOS 10.15watchOS 6.0
  • 现在可以定义非 final 类的对象。
  • 添加了新的 generateSnapshot()restoreSnapshot(_:) 方法,用于生成和恢复 Snapshot 对象,该对象可以保存(例如,到 iCloud)并在以后恢复。
  • 修复了可能导致 objectsCount 与存储中对象的实际数量不同步的错误。

安装

Swift 包管理器(推荐)

您可以使用 Swift 包管理器 通过将适当的描述添加到您的 Package.swift 文件来安装 UserDefaultsStore

import PackageDescription

let package = Package(
    name: "YOUR_PROJECT_NAME",
    targets: [],
    dependencies: [
        .package(url: "https://github.com/omaralbeik/UserDefaultsStore.git", from: "2.0.0")
    ]
)

接下来,将 UserDefaultsStore 添加到您的目标的依赖项中,例如

.target(
    name: "YOUR_TARGET_NAME",
    dependencies: [
        "UserDefaultsStore",
    ]
),

然后运行 swift package update

CocoaPods

要使用 CocoaPods 将 UserDefaultsStore 集成到您的 Xcode 项目中,请在您的 Podfile 中指定它。

pod 'UserDefaultsStore'
Carthage

要使用 Carthage 将 UserDefaultsStore 集成到您的 Xcode 项目中,请在您的 Cartfile 中指定它

github "omaralbeik/UserDefaultsStore" ~> 2.0.0
手动:

Sources 文件夹添加到您的 Xcode 项目中。

使用方法

假设您定义了两个结构体 UserLaptop,如下所示:

struct User: Codable {
    var id: Int
    var firstName: String
    var lastName: String
    var laptop: Laptop?
}
struct Laptop: Codable {
    var model: String
    var name: String
}

以下是使用 UserDefaultsStore 存储它们的方式:

1. 遵守 Identifiable 协议并设置 id 属性

Identifiable 协议让 UserDefaultsStore 能够知道每个对象的唯一 id。

struct User: Codable, Identifiable {
    ...
}
struct Laptop: Codable, Identifiable {
    var id: String { model }
    ...
}

2. 创建 UserDefaults Stores

let usersStore = UserDefaultsStore<User>(uniqueIdentifier: "users")
let laptopsStore = UserDefaultsStore<Laptop>(uniqueIdentifier: "laptops")

好了,一切设置完毕!

let macbook = Laptop(model: "A1278", name: "MacBook Pro")
let john = User(id: 1, firstName: "John", lastName: "Appleseed", laptop: macbook)

// Save an object to a store
try! usersStore.save(john)

// Save an array of objects to a store
try! usersStore.save([jane, steve, jessica])

// Get an object from store
let user = store.object(withId: 1)
let laptop = store.object(withId: "A1278")

// Get all objects in a store
let laptops = laptopsStore.allObjects()

// Check if store has an object
print(usersStore.hasObject(withId: 10)) // false

// Iterate over all objects in a store
laptopsStore.forEach { laptop in
    print(laptop.name)
}

// Delete an object from a store
usersStore.delete(withId: 1)

// Delete all objects in a store
laptops.deleteAll()

// Know how many objects are stored in a store
let usersCount = usersStore.objectsCount

// Create a snapshot
let snapshot = usersStore.generateSnapshot()

// Restore a pre-generated snapshot
try? usersStore.restoreSnapshot(snapshot)

只想存储单个项目吗?

使用 SingleUserDefaultsStore,它允许存储和检索单个 IntDoubleString 或任何 Codable 类型。

需求

  • iOS 13.0+ / macOS 10.15+ / tvOS 13.0+ / watchOS 6.0+
  • Swift 5.0+

致谢

特别感谢

鸣谢

图标由freepikflaticon.com上创建。

许可

UserDefaultsStore是在MIT许可证下发布的。更多信息请参阅LICENSE