我希望从UserDefaults中设置或检索值,该值是一个可选的Int,这意味着它要么为空,要么设置为一个值。然而,我在二传手中感到困惑。在下面的代码中,我将其设置为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")
}
}
}发布于 2019-05-09 01:14:36
您可以减少setter
set {
UserDefaults.standard.set(newValue?.rawValue, forKey:"myKey")
}由于可选链接,如果newValue为nil,则会写出nil。
发布于 2019-05-09 01:12:51
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")
}
}https://stackoverflow.com/questions/56045791
复制相似问题