用于从任何类型的存储中保存和检索数据的 Swift 库。
UserDefaults 的封装,允许您存储和检索 Codable 对象。
import FoundationKit
struct User: Codable {
let name: String
let email: String
let age: Int
}
final class UserViewModel {
@Defaults("user", defaultValue: nil)
var user: User? {
didSet {
print("new user: \(user)")
}
}
}
一个提供从 UserDefaults 保存和检索数据的方法的存储。
let storage = UserDefaultsStorage<Int?>(key: "MyKey")
storage.value = 1
一个提供从文件系统保存和检索数据的方法的存储。 它使用 FileManager
与文件系统交互。 默认路径掩码为:./userDomainMask/cachesDirectory/Storages/fileName.stg
let storage = FileStorage<Int>(fileName: "TestFile.txt")
storage.value = 1
一个提供在内存中保存和检索数据的方法的存储。
let storage = InMemoryStorage<Int>(value: 1)
storage.value = 1
一个提供从 OS Keychain 保存和检索数据的方法的存储。 最安全的存储,但受 SDK 的限制。
let storage = KeychainStorage(key: "MyKey", configuration: .init(service: Bundle.main.bundleIdentifier ?? "MyService")
storage.value = auth.token
类型擦除的存储,提供从任何类型的存储中保存和检索数据的方法。 每个存储都有一个 toAny()
方法,用于将特定存储转换为 AnyStorage
。
let storage = UserDefaultsStorage<Int?>(key: "MyKey").toAny()
storage.value = 1
AnyStorage<Value>
符合 Storage
协议,可以通过 combine()
方法或全局函数 zip(storages:)
与其他存储组合使用。
let userDefaultsStorage = UserDefaultsStorage<Int?>(value: 1)
let inMemoryStorage = InMemoryStorage<Int>(value: 1)
let combined = inMemoryStorage.combine(userDefaultsStorage) // AnyStorage<Int>
combined.value = 1
zip<Value>(storages: [any Storage<Value>])
仅在 iOS 16 或更高版本中可用
let combined = zip(storages: [
InMemoryStorage<Int?>(value: 1),
UserDefaultsStorage(key: "MyKey")
])
zip<Value>(storages: [AnyStorage<Value>])
在 iOS 16 或更高版本中已被弃用
let combined = zip(storages: [
InMemoryStorage<Int?>(value: 1).toAny(),
UserDefaultsStorage(key: "MyKey").toAny()
])
属性包装器,允许您为该值设置过期时间。
@Expirable(lifetime: .oneHour) var token: String?