我尝试在NSUserDefaults中存储一个可选的bool,其中所有三种状态都有意义。
NSUserDefaults
bool
nil
true
false
目前,如果您从NSUserDefaults中检索bool,如果尚未设置它,则返回false,这不适用于上述用例。我不想使用enum,因为它似乎矫枉过正,我期待实现。我是不是漏掉了什么?
enum
mwkjh3gx1#
你可以直接从UserDefaults中取值,然后试着把它转换成Bool。如果键u没有值,则得到nil。let myBool = UserDefaults.standard.object(forKey: "BoolKey") as? Bool或let myBool = UserDefaults.standard.value(forKey: "BoolKey") as? BoolmyBool = nil(两种情况下)感谢user28434的添加
Bool
let myBool = UserDefaults.standard.object(forKey: "BoolKey") as? Bool
let myBool = UserDefaults.standard.value(forKey: "BoolKey") as? Bool
myBool = nil
user28434
yks3o0rb2#
Bool-以及Int和Double-在UserDefaults中被视为非可选的,如果密钥不存在,则所有专用getter返回0/false。解决方法是首先使用object(forKey检查nil,或者保存字符串并实现计算属性以Map类型。在实践中,* 未设置 * 和 * 假 * 真的有区别吗?
Int
Double
UserDefaults
0/false
object(forKey
2条答案
按热度按时间mwkjh3gx1#
你可以直接从UserDefaults中取值,然后试着把它转换成
Bool
。如果键u没有值,则得到nil。let myBool = UserDefaults.standard.object(forKey: "BoolKey") as? Bool
或
let myBool = UserDefaults.standard.value(forKey: "BoolKey") as? Bool
myBool = nil
(两种情况下)感谢
user28434
的添加yks3o0rb2#
Bool
-以及Int
和Double
-在UserDefaults
中被视为非可选的,如果密钥不存在,则所有专用getter返回0/false
。解决方法是首先使用
object(forKey
检查nil
,或者保存字符串并实现计算属性以Map类型。在实践中,* 未设置 * 和 * 假 * 真的有区别吗?