在 NSUserDefaults 中存储可选的 bool
Store optional bool in NSUserDefaults
我正在尝试将可选的 bool
存储在 NSUserDefaults
中,其中所有三种状态都有意义。
nil
-> 尚未设置
true
/false
-> 已明确设置为此值
目前看来,如果你从 NSUserDefaults
中检索一个 bool
,如果它还没有被设置那么它 returns false
,它赢了'适用于上述用例。
我不想使用 enum
,因为它对我想要实现的目标来说似乎有点过分了。
我在这里遗漏了什么吗?
Bool
– 以及 Int
和 Double
– 在 UserDefaults
中被视为非可选的,所有专用的 getters return 0/false
如果密钥不存在。
解决方法是首先使用 object(forKey
检查 nil
或保存字符串并实现计算的 属性 来映射类型。
实际上 not set 和 false 真的有区别吗?
您可以只从 UserDefaults 中获取值并尝试将其转换为 Bool
。如果键没有值,您将得到 nil。
let myBool = UserDefaults.standard.object(forKey: "BoolKey") as? Bool
或
let myBool = UserDefaults.standard.value(forKey: "BoolKey") as? Bool
myBool = nil
两种情况
感谢user28434
补充
我正在尝试将可选的 bool
存储在 NSUserDefaults
中,其中所有三种状态都有意义。
nil
-> 尚未设置true
/false
-> 已明确设置为此值
目前看来,如果你从 NSUserDefaults
中检索一个 bool
,如果它还没有被设置那么它 returns false
,它赢了'适用于上述用例。
我不想使用 enum
,因为它对我想要实现的目标来说似乎有点过分了。
我在这里遗漏了什么吗?
Bool
– 以及 Int
和 Double
– 在 UserDefaults
中被视为非可选的,所有专用的 getters return 0/false
如果密钥不存在。
解决方法是首先使用 object(forKey
检查 nil
或保存字符串并实现计算的 属性 来映射类型。
实际上 not set 和 false 真的有区别吗?
您可以只从 UserDefaults 中获取值并尝试将其转换为 Bool
。如果键没有值,您将得到 nil。
let myBool = UserDefaults.standard.object(forKey: "BoolKey") as? Bool
或
let myBool = UserDefaults.standard.value(forKey: "BoolKey") as? Bool
myBool = nil
两种情况
感谢user28434
补充