我正在尝试在所有三个状态都有意义的bool
中存储可选的NSUserDefaults
。
nil
->尚未设置true
/ false
->已明确设置为此值目前看来,如果您从bool
中检索NSUserDefaults
,如果尚未设置,那么它将返回false
,在以上情况下将不起作用提到的用例。
我不想使用enum
,因为它对于我要实现的目标似乎有些过分。
我这里缺少什么吗?
答案 0 :(得分:4)
您可以只从UserDefaults中获取值,然后尝试将其转换为Bool
。如果键没有值,则为零。
let myBool = UserDefaults.standard.object(forKey: "BoolKey") as? Bool
或
let myBool = UserDefaults.standard.value(forKey: "BoolKey") as? Bool
myBool = nil
两种情况
感谢user28434
的加入
答案 1 :(得分:2)
Bool
–以及Int
中的Double
和UserDefaults
–被认为是非可选的,如果密钥确实执行,则所有专用的getter都会返回0/false
不存在。
一种解决方法是先用nil
检查object(forKey
或保存一个字符串并实现一个计算属性来映射类型。
实际上未设置和 false 真的有区别吗?