通常的UserDefaults本地存储api使用方式像这样比价繁琐
如下:
//写入
let defaults = UserDefaults.standard
defaults.set(20, forKey: "Age")
defaults.set(CGFloat.pi, "PI")
//读取
defaults.integer(forKey: "Age")
改为如下优化使用方式:
其中#function是Swift内置编译符号,指代包含这个符号的方法或属性名,这里等同于字符串startup
import Foundation
extension UserDefaults {
// 通过下标使用枚举
subscript<T: RawRepresentable>(key: String) -> T? {
get {
if let rawValue = value(forKey: key) as? T.RawValue {
return T(rawValue: rawValue)
}
return nil
}
set { set(newValue?.rawValue, forKey: key) }
}
subscript<T>(key: String) -> T? {
get { return value(forKey: key) as? T }
set { set(newValue, forKey: key) }
}
}
struct Preference {
/** 开机启动 */
static var startup: Bool {
get { return UserDefaults.standard[#function] ?? false }
set { UserDefaults.standard[#function] = newValue }
}
}
使用方式如下,代码干净多了
写入
Preference.startup = true
读取
print(Preference.startup)
Swift内置编译符号说明:
网友评论