你喜欢 Swift 的 Codable 协议,并在任何地方使用它

博士

你喜欢 Swift 的协议,并在任何地方使用它,谁不喜欢呢!这是一种简单而轻松的存储和检索方法 - 合理的数量?- 对象,在几行代码中!CodableCodable


v2.0 简介

  • 删除了协议以支持 Swift 的 .IdentifiableIdentifiable
  • 增加了对 iOS、、 和 的部署目标。13.0tvOS 13.0macOS 10.15watchOS 6.0
  • 定义为非最终类的对象现在也可以使用。
  • 添加了新的和方法来生成和恢复可以保存(例如到iCloud)并在以后恢复的对象。generateSnapshot()restoreSnapshot(_:)Snapshot
  • 修复了可能与存储中对象的实际计数不同步的错误。objectsCount

安装

Swift Package Manager (推荐)

You can use The Swift Package Manager to install by adding the proper description to your file:UserDefaultsStorePackage.swift

import PackageDescription

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

Next, add to your targets dependencies like so:UserDefaultsStore

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

Then run .swift package update

可可豆荚

To integrate UserDefaultsStore into your Xcode project using CocoaPods, specify it in your :Podfile

pod 'UserDefaultsStore'
Ruby
Carthage

To integrate UserDefaultsStore into your Xcode project using Carthage, specify it in your :Cartfile

github "omaralbeik/UserDefaultsStore" ~> 2.0.0
Ogdl
Manually

Add the Sources folder to your Xcode project.

Usage

Let's say you have 2 structs; and defined as bellow:UserLaptop

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

Here is how you store them in UserDefaultsStore:

1. Conform to the protocol and set the propertyIdentifiableid

The protocol lets UserDefaultsStore knows what is the unique id for each object.Identifiable

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

2. Create UserDefaults Stores

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

3. Voilà, you're all set!

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)
Swift

Looking to store a single item only?

Use SingleUserDefaultsStore, it enables storing and retrieving a single value of , , , or any type.IntDoubleStringCodable

Requirements

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

Thanks

Special thanks to:

Credits

Icon made by freepik from flaticon.com.

License

UserDefaultsStore is released under the MIT license. See LICENSE for more information.

GitHub

https://github.com/omaralbeik/UserDefaultsStore