UserDefaultsStorable 2.0.0

UserDefaultsStorable 2.0.0

mrfour 维护。



  • mrfour

UserDefaultsStorable

UserDefaultsStorable 提供了一种简单、强类型的访问 UserDefaults 中属性的方法。

摘要

  • 强类型:无需类型转换访问属性。
  • Codable 支持:支持任何符合 Codable 协议的类型。
  • 观察:用提供的键观察属性的改变。[

要求

  • iOS 11.0+
  • Xcode 11.4+
  • Swift 5.2+

安装

Cocoapods

pod "UserDefaultsStorable"

Swift 包管理器

.package(url: "https://github.com/mrfour0004/UserDefaultsStorable", from: "2.0.0")

用法

要开始使用 UserDefaultsStorable,只需声明一个具有给定键和默认值的 UserDefaults 属性。

enum Defaults {
    @UserDefault(key: "username")
    static var username: String = "mrfour0004"
    
    // Of course type inference works as expected
    @UserDefault(key: "displayName")
    static var displayName = "mrfour"
    
    // If the stored type is Optional, initial value is not required as normal optional properties
    @UserDefault(key: "token")
    static var token: String?   
}

print(Defaults.username) // guest
print(Defaults.token)    // nil

遵循 UserDefaultsStorable 类型

您可能有自定义类型,并希望它们可以存储在 UserDefaults 中。只需将它们遵循 UserDefaultsStorable 协议,并实现所需的 userDefaultsBridge 属性。

struct Point {
    let x: Int, y: Int
}

extension Point: UserDefaultsStorable {
    static var userDefaultsBridge: UserDefautsBridge<Point> {
        UserDefaultsBridge(
            serialization: { point in
                return ["x": point.x, "y": point.y]
            },
            deserialization: { object in
                guard
                    let dict = object as? [String: Int]
                    let x = dict["x"] as? Int,
                    let y = dict["y"] as? Int
                else { return nil }
                return Point(x: x, y: y)
            }
        }
    }
}

如果类型还遵循 Codable,则已经提供了 userDefaultsBridge 的默认实现。

struct Point: Codable, UserDefaultsStorable {
    let x: Int, y: Int
}

enum Defaults {
    @UserDefault(key: "point")
    static var point: Point?
}

观察

enum Defaults {
    @UserDefault(key: "username")
    static var username: String = "guest"
}

let observation = Defaults.$username.observe(withOptions: [.old, .new]) { change in
    print(change.newValue) // print Optional("guest")
    print(change.oldValue) // print Optional("mrfour")
}

let newValueObservation = Defaults.$username.observe { newValue in 
    print(newValue) // print Optional("mrfour")
}

Defaults.username = "mrfour"

许可证

UserDefaultsStorable 在 MIT 许可下可用。有关更多信息,请参阅 LICENSE 文件。