TypesafeUserDefaults 1.0.0

TypesafeUserDefaults 1.0.0

Andreas Kern 维护。



  • Andreas Kern

Typesafe UserDefaults

Build Status

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