📜  swift userdefaults 枚举 - Swift (1)

📅  最后修改于: 2023-12-03 15:35:12.521000             🧑  作者: Mango

Swift UserDefaults 枚举

简介

Swift 中的 UserDefaults 类使得我们能够轻松地存储和读取应用的配置信息,如主题、语言、用户设置等。一般情况下,我们使用字符串常量来标识键值对,这显得有些麻烦和不直观。本文将介绍如何用枚举类型来管理 UserDefaults 中的键值对。

步骤
1. 创建枚举类型

我们根据需要创建一个新的枚举类型,其中每个枚举值都代表一个键名。例如,如果我们的应用需要管理主题,我们可以这样定义:

enum ThemeKey: String {
    case themeColor
    case font
    case backgroundColor
}
2. 扩展 UserDefaults 类型

接下来,我们需要扩展 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
    }
}
3. 使用枚举类型

接下来,我们可以使用新创建的枚举类型来存储和读取与主题相关的设置。

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
4. 总结

使用枚举类型来管理 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