UserDefaultsKey

Test results Latest release Swift 5.1 Platforms: iOS, macOS, tvOS, watchOS, Linux

一个用于指定与 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 {
        
        }
    }
}