在 NSUserDefaults 中存储可选的 bool

Store optional bool in NSUserDefaults

我正在尝试将可选的 bool 存储在 NSUserDefaults 中,其中所有三种状态都有意义。

目前看来,如果你从 NSUserDefaults 中检索一个 bool,如果它还没有被设置那么它 returns false,它赢了'适用于上述用例。

我不想使用 enum,因为它对我想要实现的目标来说似乎有点过分了。

我在这里遗漏了什么吗?

Bool – 以及 IntDouble – 在 UserDefaults 中被视为非可选的,所有专用的 getters return 0/false 如果密钥不存在。

解决方法是首先使用 object(forKey 检查 nil 或保存字符串并实现计算的 属性 来映射类型。

实际上 not setfalse 真的有区别吗?

您可以只从 UserDefaults 中获取值并尝试将其转换为 Bool。如果键没有值,您将得到 nil。

let myBool = UserDefaults.standard.object(forKey: "BoolKey") as? Bool

let myBool = UserDefaults.standard.value(forKey: "BoolKey") as? Bool

myBool = nil 两种情况

感谢user28434补充