Swift UserDefaults可选的Int

时间:2019-05-08 17:06:22

标签: ios swift nsuserdefaults

我想从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")
        }

    }
}

2 个答案:

答案 0 :(得分:2)

您可以减少二传手

set {
    UserDefaults.standard.set(newValue?.rawValue, forKey:"myKey")
}

由于可选链接,如果nilnewValue,则会写出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")
    }
}