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)