StorablePropertyWrapper

GitHub license Language Swift Package Manager

一个 Swift 属性包装器,用于在键值存储中类型安全地存储对象。完美适配 UserDefaults,并可用于 SwiftUI 绑定

用法

像往常一样定义你的可存储属性,并在它们前面加上 @Storable 关键字。与其他属性包装器一样,它支持静态和非静态属性。

class MyStorableValuesContainer {

    @Storable(key: "myStorableValueStringKey", default: "Hello")
    static var myStorableValueString: String

    @Storable(key: "myStorableValueBoolKey", default: false)
    static var myStorableBoolValue: Bool

    @Storable(key: "myStorableValueDateKey", default: nil)
    var myStorableDateValue: Date?

}

默认情况下支持许多标准类型,并且也支持这些类型的容器,例如数组和字典。也支持具有这些标准类型原始值的枚举。

如果你想存储支持 Codable 的类型,你只需要用 StorableCodableValue 协议标记你的类型,属性包装器将负责所有的编码和解码。

struct MyStruct: Codable {
    var name: String
    var date: Date
}

extension MyStruct: StorableCodableValue {}



class MyCustomStoreContainer {

    @Storable(key: "myStorableValueKey", default: nil)
    var myStruct: MyStruct?

}

自定义键值存储

@Storable 不仅可以与 UserDefaults 一起使用,它是存储无关的,你可以为其他键值存储添加支持。只需在你的键值存储中实现 KeyStore 协议,并在 @Storable 构造器中添加存储实例,就像这样

extension MyKeyValueStore: KeyStore {
... Implement the KeyStore protocol required methods ...
}

let store: MyKeyValueStore = MyKeyValueStore()

class MyCustomStoreContainer {

    @Storable(key: "myStorableValueStringKey", default: "Hello", store: store)
    var myStorableValueString: String}

额外功能

如果你想删除存储在键值存储中的值,@Storeable 允许通过 ${property} 调用 remove() 方法来访问包装的值,就像这样

class MyCustomStoreContainer {

    @Storable(key: "myStorableValueStringKey", default: "Hello", store: store)
    static var myStorableValueString: String}

MyCustomStoreContainer.$myStorableValueString.remove()

@Storeable 还为每个属性发送 will/did change 通知,以便你可以对所有个别属性的更改做出反应。

let token = NotificationCenter.default.addObserver( forName: MyCustomStoreContainer.$myStorableValueString.willChangeNotification, object: nil, queue: nil ) { notification in
  // React to will change 
}

let token = NotificationCenter.default.addObserver( forName: MyCustomStoreContainer.$myStorableValueString.didChangeNotification, object: nil, queue: nil ) { notification in
  // React to did change 
}

安装

你可以使用 Swift Package Manager,通过在你的 Package.swift 文件中声明 StorablePropertyWrapper 作为依赖项

.package(url: "https://github.com/tapsandswipes/StorablePropertyWrapper", from: "1.0.0")

更多信息,请参阅 Swift Package Manager 文档

联系方式

如果你使用/喜欢 StorablePropertyWrapper,请告诉我!

许可

MIT 许可证

版权所有 (c) 2020 Antonio Cabezuelo Vivo

特此授权,免费授予任何人获得本软件及相关文档文件(“软件”)副本的许可,以便在不受限制的情况下处理本软件,包括但不限于使用、复制、修改、合并、出版、发行、再许可和/或销售软件副本的权利,并允许向为其提供软件的人员授予该等许可,但须符合以下条件

上述版权声明和本许可声明应包含在本软件的所有副本或主要部分中。

本软件按“原样”提供,不作任何形式的明示或暗示的保证,包括但不限于对适销性、特定用途的适用性和不侵权的保证。在任何情况下,作者或版权持有人均不对任何索赔、损害或其他责任负责,无论是在合同诉讼、侵权行为或其他方面,因本软件或本软件的使用或其他交易而产生、源于本软件或与之相关。