Typesafe UserDefaults
TypesafeUserDefaults 是对 UserDefaults 的一个轻量级扩展,可以启用类型安全的用法。另外,符合 Codable 协议的类型可以存储在 UserDefaults 中。
特性
强类型
定义键名
enum UserKeys {
static let name = UserDefaults.Key<String>("name")
static let date = UserDefaults.Key<Date>("date")
}
像经典 UserDefaults API 一样使用它们
UserDefaults.standard.set("Max Mustermann", forKey: UserKeys.name)
UserDefaults.standard.set(Date(), forKey: UserKeys.date)
let name = UserDefaults.standard.value(forKey: UserKeys.name)
let date = UserDefaults.standard.value(forKey: UserKeys.date)
或使用方便的索引器
UserDefaults.standard[UserKeys.name] = "Max Mustermann"
UserDefaults.standard[UserKeys.date] = Date()
let name = UserDefaults.standard[UserKeys.name]
let date = UserDefaults.standard[UserKeys.date]
编译器将告诉您有错误的地方
// UIImage is not archivable in UserDefaults
let imageKey = UserDefaults.Key<UIImage>("image")
// Assigning value of type Date to a key that defined the value to be String
UserDefaults.standard[UserKeys.name] = Date()
// The return type does not match the type of the value
let date: Date = UserDefaults.standard[UserKeys.name]
提供默认值
提供默认值非常简单,就像您定义键名一样。不再需要使用 register
let pointsKey = UserDefaults.DefaultKey<Int>("points", 23)
var currentPoints = UserDefaults.standard[pointsKey] // 23
UserDefaults.standard[pointsKey] += 2
currentPoints = UserDefaults.standard[pointsKey] // 25
存储 Codable 类型
符合 CustomDefaultsArchivable
struct User: CustomDefaultsArchivable {
let name: String
let date: Date
}
定义键
let userKey = UserDefaults.Key<User>("user")
使用键
UserDefaults.standard[userKey] = User(name: "Max Mustermann", date: Date())
let name = UserDefaults.standard[userKey]?.name
let date = UserDefaults.standard[userKey]?.date
要求
>= Swift 4.1