在Swift中为了安全考虑,引入了Optional的类型, 但是在使用的时候可能需要获取到非Optional的值,如下
UserDefaults.standard.set("hello", forKey: "ly-test-key")
let str1 = UserDefaults.standard.string(forKey: "ly-test-key")
print(str1) // Optional("hello")
上面的代码中, 每次从UserDefautls获取string的时候得到的可能是nil或者存储的string值hello, 有时候还要考虑处理掉字符串中的optional描述或者将一个String?赋值给String类型的时候还要在处理。 还有另外一个考虑,就是UserDefaults的key值在swift中可以更加优雅的处理,而不必像Objective-C或其他语言那样定义一个普通的String常量。 下面直接上Swift代码
class DefaultKeys {
fileprivate init() { }
}
class DefaultKey<ValueType>: DefaultKeys {
public let key: String
init(_ key: String) {
self.key = key
}
}
extension UserDefaults {
subscript(key: DefaultKey<Int>) -> Int {
set {
set(newValue, forKey: key.key)
}
get {