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
遵循 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