我想在NSUserDefaults
中存储一个可选的bool
,其中所有三种状态都具有意义:
nil
-> 尚未设置true
/false
-> 已明确设置为此值
目前看来,如果从NSUserDefaults
检索bool
,如果未设置,则返回false
,这对于上述用例不起作用。
我不想使用enum
,因为它似乎对我想要实现的内容来说过于繁琐。
我是否漏掉了什么重要信息?
我想在NSUserDefaults
中存储一个可选的bool
,其中所有三种状态都具有意义:
nil
-> 尚未设置true
/false
-> 已明确设置为此值目前看来,如果从NSUserDefaults
检索bool
,如果未设置,则返回false
,这对于上述用例不起作用。
我不想使用enum
,因为它似乎对我想要实现的内容来说过于繁琐。
我是否漏掉了什么重要信息?
Bool
。如果没有该密钥的值,则会获得nil
。
let myBool = UserDefaults.standard.object(forKey: "BoolKey") as? Bool
或者
let myBool = UserDefaults.standard.value(forKey: "BoolKey") as? Bool
在这两种情况下,myBool
均为nil
。user28434
的补充。object(forKey:)
在幕后作为value(forKey:)
工作。 - Grigory Serebryanyyvalue(forKey:)
可能会调用 UserDefaults
的 object(forKey:)
方法。但反过来则不行。 - user28434'mstepBool
、Int
和Double
在UserDefaults
中被视为非可选类型,如果键不存在,则所有专用的getter方法都会返回0/false
。object(forKey
检查是否为nil
,或者保存一个字符串并实现一个计算属性来映射类型。