我想从UserDefaults设置或检索一个可选的Int值,这意味着它可以为nil或设置为一个值。但是我对二传手感到困惑。在下面的代码中,我将其设置为nil或整数。我不确定这是否正确。是否有更好或更干净的方法(假设我所做的一切完全正确)?
public var selectedOption:myOption? {
get {
if let opt = UserDefaults.standard.object(forKey: "myKey") as? Int {
if let val = myOption(rawValue: opt) {
return val
}
}
return nil
}
set {
if let newVal = newValue {
UserDefaults.standard.set(newVal.rawValue, forKey:"myKey")
} else {
UserDefaults.standard.set(nil, forKey:"myKey")
}
}
}
答案 0 :(得分:2)
您可以减少二传手
set {
UserDefaults.standard.set(newValue?.rawValue, forKey:"myKey")
}
由于可选链接,如果nil
为newValue
,则会写出nil
。
答案 1 :(得分:0)
public var selectedOption:myOption? {
get {
if let opt = UserDefaults.standard.object(forKey: "myKey") as? Int {
return myOption(rawValue: opt)
}
return nil
}
set {
UserDefaults.standard.set(newValue?.rawValue, forKey: "myKey")
}
}
或
确认可编码协议并将枚举实例存储在UserDefaults中
enum myOption: Int, Codable {
case a
case b
}
public var selectedOption1:myOption? {
get {
if let storedObject: Data = UserDefaults.standard.object(forKey: "myKey") as? Data {
return try? PropertyListDecoder().decode(myOption.self, from: storedObject)
}
return nil
}
set {
UserDefaults.standard.set(try? PropertyListEncoder().encode(newValue), forKey: "myKey")
}
}