ios-需要掌握的知识点

iOS Swift UserDefaults的使用

2020-04-21  本文已影响0人  A_rcher34

在项目中,总会用到数据持久化,UserDefaults则是其中一种。为了能更优雅的使用UserDefaults,有两个点需要注意:
第一点:减少key的重复编写。这样既容易修改,也会避免复制时出错。
第二点:key的数量有可能会很多,对key进行一定的分类,既可以增加可读性又提高了代码的美观性。

下面直接展示成果:

extension UserDefaults {
    
    // 设置信息,BasicSettings便是自定义的一个分类。例如,还可以增加LoginInfo、AccountInfo等其他分类
    struct BasicSettings: UserDefaultsSettable {
        enum defaultKeys: String {
            case CSUserDefaults_Key_FirstLaunch = "firstLaunch"                 // 是否是第一次启动
            
            case CSUserDefaults_Key_InstallationGuid = "installationGuid"       // 安装指南
            
            case UserDefaultsIsSelectAuto = "IsSelectAuto"                      // 是否是自动选择模式
        }
    }

}

protocol UserDefaultsSettable {
    associatedtype defaultKeys: RawRepresentable
}

extension UserDefaultsSettable where defaultKeys.RawValue==String {
    // set方法
    static func setInt(value: Int, forKey key: defaultKeys) {
        let aKey = key.rawValue
        UserDefaults.standard.set(value, forKey: aKey)
    }
    static func setString(value: String?, forKey key: defaultKeys) {
        let aKey = key.rawValue
        UserDefaults.standard.set(value, forKey: aKey)
    }
    static func setBool(value: Bool?, forKey key: defaultKeys) {
        let aKey = key.rawValue
        UserDefaults.standard.set(value, forKey: aKey)
    }
    static func setArray(value: [Any]?, forKey key: defaultKeys) {
        let aKey = key.rawValue
        UserDefaults.standard.set(value, forKey: aKey)
    }
    // get方法
    static func getInt(forKey key: defaultKeys) -> Int {
        let aKey = key.rawValue
        return UserDefaults.standard.integer(forKey: aKey)
    }
    static func getString(forKey key: defaultKeys) -> String? {
        let aKey = key.rawValue
        return UserDefaults.standard.string(forKey: aKey)
    }
    static func getBool(forKey key: defaultKeys) -> Bool! {
        let aKey = key.rawValue
        return UserDefaults.standard.bool(forKey: aKey)
    }
    static func getArray(forKey key: defaultKeys) -> [Any]? {
        let aKey = key.rawValue
        return UserDefaults.standard.array(forKey: aKey)
    }
    // 设置某个key的默认存储值
    static func register(forKey key: defaultKeys, _ value: Any) {
        let aKey = key.rawValue
        UserDefaults.standard.register(defaults: [aKey: value])
    }
}

使用方式:

UserDefaults.BasicSettings.getString(forKey: .CSUserDefaults_Key_InstallationGuid)
UserDefaults.BasicSettings.setString(value: str, forKey: .CSUserDefaults_Key_InstallationGuid)
UserDefaults.BasicSettings.register(forKey: .CSUserDefaults_Key_FirstLaunch, true)

参考文献

上一篇 下一篇

猜你喜欢

热点阅读