swift 在NSUserDefaults中存储可选布尔值

ndasle7k  于 2023-03-07  发布在  Swift
关注(0)|答案(2)|浏览(141)

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

  • nil-〉尚未设置
  • true/false-〉已显式设置为此值

目前,如果您从NSUserDefaults中检索bool,如果尚未设置它,则返回false,这不适用于上述用例。
我不想使用enum,因为它似乎矫枉过正,我期待实现。
我是不是漏掉了什么?

mwkjh3gx

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的添加

yks3o0rb

yks3o0rb2#

Bool-以及IntDouble-在UserDefaults中被视为非可选的,如果密钥不存在,则所有专用getter返回0/false
解决方法是首先使用object(forKey检查nil,或者保存字符串并实现计算属性以Map类型。
在实践中,* 未设置 * 和 * 假 * 真的有区别吗?

相关问题