优雅地使用UserDefaults

104 阅读1分钟
// https://github.com/nmdias/DefaultsKit
import DefaultsKit

//MARK: - 统一定义 UserDefaults.keys

extension DefaultsKey {
    /// 测试用,仅做演示
    static let testKey = Key<String>("testKey")
}

//MARK: - 包装器,作为var使用

@propertyWrapper
public struct DefaultsVar<T: Codable> {
    
    public let key: Key<T>
    
    public var wrappedValue:T? {
        get { Defaults.shared.get(for: key) }
        set { newValue == nil ? Defaults.shared.clear(key) : Defaults.shared.set(newValue!, for: key) }
    }
    
    public init(_ key: Key<T>) { self.key = key }
}

//MARK: - ⬇️演示使用代码

fileprivate func testDefaultsKey() {
    // 直接使用
    Defaults.shared.set("test value", for: .testKey)
    _ = Defaults.shared.get(for: .testKey)
    
    // 作为成员变量使用
    TestDefaultsVar.testValue = "testValue"
    _ = TestDefaultsVar.testValue
}

fileprivate struct TestDefaultsVar {
    @DefaultsVar(.testKey) static var testValue
}