首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swift UserDefaults可选接口

Swift UserDefaults可选接口
EN

Stack Overflow用户
提问于 2019-05-09 01:06:22
回答 2查看 698关注 0票数 2

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

代码语言:javascript
复制
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")
        }

    }
}
EN

回答 2

Stack Overflow用户

发布于 2019-05-09 01:14:36

您可以减少setter

代码语言:javascript
复制
set {
    UserDefaults.standard.set(newValue?.rawValue, forKey:"myKey")
}

由于可选链接,如果newValuenil,则会写出nil

票数 3
EN

Stack Overflow用户

发布于 2019-05-09 01:12:51

代码语言:javascript
复制
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中

代码语言:javascript
复制
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")
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56045791

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档