📅  最后修改于: 2023-12-03 15:35:12.521000             🧑  作者: Mango
Swift 中的 UserDefaults 类使得我们能够轻松地存储和读取应用的配置信息,如主题、语言、用户设置等。一般情况下,我们使用字符串常量来标识键值对,这显得有些麻烦和不直观。本文将介绍如何用枚举类型来管理 UserDefaults 中的键值对。
我们根据需要创建一个新的枚举类型,其中每个枚举值都代表一个键名。例如,如果我们的应用需要管理主题,我们可以这样定义:
enum ThemeKey: String {
case themeColor
case font
case backgroundColor
}
接下来,我们需要扩展 UserDefaults 类型,使其支持使用我们刚刚定义的枚举类型来设置或获取值。我们使用泛型来支持任何类型的值。
extension UserDefaults {
func set<T>(_ value: T, forKey key: ThemeKey) {
set(value, forKey: key.rawValue)
}
func value<T>(forKey key: ThemeKey) -> T? {
return value(forKey: key.rawValue) as? T
}
}
接下来,我们可以使用新创建的枚举类型来存储和读取与主题相关的设置。
UserDefaults.standard.set("#E1E1E1", forKey: .themeColor)
UserDefaults.standard.set("Helvetica", forKey: .font)
UserDefaults.standard.set("#FFFFFF", forKey: .backgroundColor)
为了获得这些值,我们可以使用以下代码:
let themeColor = UserDefaults.standard.value(forKey: .themeColor) as? String
let fontName = UserDefaults.standard.value(forKey: .font) as? String
let backgroundColor = UserDefaults.standard.value(forKey: .backgroundColor) as? String
使用枚举类型来管理 UserDefaults 中的键值对,能够使代码更加简洁和易读,因为使用者不需要记住每个键的字符串常量。
完整代码如下:
enum ThemeKey: String {
case themeColor
case font
case backgroundColor
}
extension UserDefaults {
func set<T>(_ value: T, forKey key: ThemeKey) {
set(value, forKey: key.rawValue)
}
func value<T>(forKey key: ThemeKey) -> T? {
return value(forKey: key.rawValue) as? T
}
}
// 存储设置
UserDefaults.standard.set("#E1E1E1", forKey: .themeColor)
UserDefaults.standard.set("Helvetica", forKey: .font)
UserDefaults.standard.set("#FFFFFF", forKey: .backgroundColor)
// 读取设置
let themeColor = UserDefaults.standard.value(forKey: .themeColor) as? String
let fontName = UserDefaults.standard.value(forKey: .font) as? String
let backgroundColor = UserDefaults.standard.value(forKey: .backgroundColor) as? String