这个包旨在轻松集成和简化对用户默认设置的访问,并且它支持 WWDC23 的新隐私规则。将其添加到您的项目非常简单:只需在主应用程序包中包含包链接,如下所示:
或者,导航到标记为“Files”的顶部部分,然后单击“Add Package Dependency”。
接下来,将存储库链接粘贴到搜索字段中,然后单击“Add Package”。
此 API 的设计旨在简单直接,并且像使用 @AppStorage
API 一样轻松,但功能更多。首先,此 API 是编译时安全的,可防止任何字符串拼写错误。只需在 DefaultKeys
中声明您的键,然后按如下所示将 @UserDefaults
添加到您的 varible
中 - 就这么简单。
@UserDefaults(\.previewShown) var previewShown = false // false is the default value
extension DefaultKeys {
var previewShown: String { .init("previewShown") }
}
注意
您也可以像这样存储可选值。
@UserDefaults(\.previewShown) var previewShown: Bool?
您还可以像这样将您的 userDefaults 存储在自定义 container
中。
@UserDefaults(\.previewShown, .init(suiteName: "YourCustomeContainerName")) var previewShown = false
SwiftUserDefaults 支持所有标准的 NSUserDefaults
类型,例如 String
、Int
、Bool
、Array
等等。
这是内置单值默认值的完整表格。
单值 | 数组 |
---|---|
字符串 |
[字符串] |
整数 |
[整数] |
双精度浮点数 |
[双精度浮点数] |
布尔值 |
[布尔值] |
数据 |
[数据] |
日期 |
[日期] |
URL |
[URL] |
[String: Any] |
[[String: Any]] |
但是您也可以支持自定义数据类型 🚀
存储自定义数据类型非常简单;您只需要确保自定义数据类型符合 DefaultsCustomDataType
,如下所示。
struct CustomeData: DefaultsCustomDataType {
init()
}
@UserDefaults(\.customeData) var customeData = CustomeData()
DefaultsCustomDataType
是一个 public
protocol
,它符合 Codable
协议。它充当桥梁,使 API 可以轻松检测此数据类型是否需要编码。
存储 Enum
非常简单;只需确保 Enum
符合 DefaultsCustomDataType
,如下所示。
enum CustomeData: DefaultsCustomDataType {
case none
}
@UserDefaults(\.customeData) var customeData: CustomeData = .none
存储自定义 Array
类型甚至更简单,只需确保 Array
的 Element
类型符合 DefaultsCustomDataType
,如下所示。
struct CustomeData: DefaultsCustomDataType {
init()
}
@UserDefaults(\.customeData) var customeData: [CustomeData] = [CustomeData()]
您还可以使用 DefaultKeys.removeObject(at keyPath: KeyPath<DefaultKeys, String>, _ container: UserDefaults = .standard)
移除特定键的存储值,如下所示。
@UserDefaults(\.testKey) var test = 3
DefaultKeys.removeObject(\.testKey)
// if you use a custome container provide it to the funcation using this syntax,
// DefaultKeys.removeObject(at keyPath: KeyPath<DefaultKeys, String>, _ container: UserDefaults = .standard)
注意
当您在移除存储的值后调用 test
时,它将给出默认值,在本例中等于 3
(未存储在 UserDefaults2 存储中)。如果它是一个 optional
,则输出在本例中将为 nil
。
如果您想删除 UserDefaults 中的所有值,可以使用 DefaultKeys.removeAllUserDefaultsObjects(for container: UserDefaults = .standard)
。
@UserDefaults(\.testKey) var test = 3
DefaultKeys.removeAllUserDefaultsObjects()
// if you use a custome container provide it to the funcation using this syntax,
// DefaultKeys.removeAllUserDefaultsObjects(for container: UserDefaults = .standard)
这就是全部内容!🚀 享受使用这个 Swifty 包吧。
这个包由 Eng.Omar Elsayed 创建,旨在帮助 iOS 社区并让他们的生活更轻松。要联系我,请发送电子邮件至 eng.omar.elsayed@hotmail.com