Ios Swift UserDefaults可选Int
我想从UserDefaults中设置或检索一个可选的Int值,这意味着它要么为nil,要么设置为值。然而,我对二传手感到困惑。在下面的代码中,我将其设置为nil或整数。我不确定这是否正确。是否有更好或更干净的方法(假设我所做的是正确的) 或 确认使用可编码协议,并将枚举实例存储在UserDefaults中Ios Swift UserDefaults可选Int,ios,swift,nsuserdefaults,Ios,Swift,Nsuserdefaults,我想从UserDefaults中设置或检索一个可选的Int值,这意味着它要么为nil,要么设置为值。然而,我对二传手感到困惑。在下面的代码中,我将其设置为nil或整数。我不确定这是否正确。是否有更好或更干净的方法(假设我所做的是正确的) 或 确认使用可编码协议,并将枚举实例存储在UserDefaults中 enum myOption: Int, Codable { case a case b } public var selectedOption1:myOption? {
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")
}
}
您可以减少setter
set {
UserDefaults.standard.set(newValue?.rawValue, forKey:"myKey")
}
由于可选链接,如果
newValue
为nil则写入nil
,则集
很好,但您的get
与问题中的get
效果不同,因为您的get
无法返回nil
。@robmayoff Enum init将在给定的int不存在时失败。这是真的,但是如果0是有效的原始枚举值,它仍然不同于原始的get
。@robmayoff修复了它
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")
}
}
set {
UserDefaults.standard.set(newValue?.rawValue, forKey:"myKey")
}