一个用于指定与 UserDefaults 一起使用的 Key 类型的包。
通常,您需要扩展 UserDefaultsKey 以添加一个静态属性,以便轻松访问键。
extension UserDefaultsKey where Value == Bool {
static let somePreference = UserDefaultsKey("somePreference", default: false)
}
然后,您可以使用简写语法通过键访问值。您返回的值将是在键声明时指定的值。
let somePreference = UserDefaults.standard.value(for: .somePreference)
if somePreference {
} else {
}
因为键具有值的类型,所以您只能为该键存储正确类型的值。
UserDefaults.standard.set(true, for: .somePreference) // Works
UserDefaults.standard.set("true", for: .somePreference) // Fails to compile
键可以使用可选值定义,并且可以回退到默认值或 nil。 仅接受键名的初始化器将返回一个回退到 nil 的键。 在声明可选键时,您还需要将 Value 的类型作为泛型参数提供。
extension UserDefaultsKey where Value == String? {
static let optionalPreference = UserDefaultsKey<String?>("optionalPreference")
}
定义键后,您可以将其传递给 UserDefault 属性包装器,以允许简洁地定义由用户默认设置支持的属性。
struct Foo {
@UserDefault(.somePreference) var somePreference
}
因为 Swift 会从键推断值类型,所以您无需在属性定义中指定它。 然而,为了清晰起见,可能需要这样做。
struct Foo {
@UserDefault(.somePreference) var somePreference: Bool
func bar() {
if somePreference {
} else {
}
}
}