Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Swift UserDefaults可选Int_Ios_Swift_Nsuserdefaults - Fatal编程技术网

Ios Swift UserDefaults可选Int

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? {

我想从UserDefaults中设置或检索一个可选的Int值,这意味着它要么为nil,要么设置为值。然而,我对二传手感到困惑。在下面的代码中,我将其设置为nil或整数。我不确定这是否正确。是否有更好或更干净的方法(假设我所做的是正确的)

确认使用可编码协议,并将枚举实例存储在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")
    }
}

您可以减少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")
}