如何安全地从用户默认值中解包值?

时间:2017-12-20 06:37:08

标签: swift optional userdefaults

if let seen: Bool = defaults.bool(forKey: UtilitiesKeys.mainTutorialSeen) {
    return seen
}
return false

如果我这样做,swift给我一个问题:

  

Bool' Bool'到布尔'总是成功,非选择性   表达类型' Bool'用于检查选项。

由于我的钥匙可能没有价值,我不想强​​行打开它。现在很明显它是这样工作的,但是如何在没有迅速抱怨的情况下安全地展开价值呢?

我也试过使用后卫......

3 个答案:

答案 0 :(得分:1)

if let seen = UserDefaults.standard.object(forKey: UtilitiesKeys.mainTutorialSeen)) as? Bool {
        return seen
    }else {
        return false
    }

答案 1 :(得分:1)

Apple文件说:

  

/ *!        -boolForKey:等效于-objectForKey:,除了它将返回的值转换为BOOL。如果值是NSNumber,则为NO   如果值为0,则返回,否则返回YES。如果值是   NSString,值为“YES”或“1”将返回YES,值为“NO”,   “0”或任何其他字符串将返回NO。如果值不存在或   无法转换为BOOL,NO将被退回。

open func bool(forKey defaultName: String) -> Bool

条件绑定的初始化程序必须具有可选类型,而不是'Bool'

希望这对你有所帮助。

答案 2 :(得分:0)

正如文档中所建议的那样:

  

if(isValid)相当于-boolForKey:,但它将返回的值转换为-objectForKey:。如果值为BOOL,则如果值为NSNumber,则会返回NO,否则将返回0。如果值为YES,则NSString"YES"的值将返回"1",以及YES"NO"或任何其他值字符串将返回"0"。如果该值不存在或无法转换为NO,则会返回BOOL

NO

它不再是可选的。因此,您无需使用open func bool(forKey defaultName: String) -> Bool 投射它。

您可以直接使用:

if let