首页 文章

如何安全地从用户默认值中解包值? [重复]

提问于
浏览
1

这个问题在这里已有答案:

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

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

从'Bool'到'Bool'的条件演员总是成功,在选项中检查中使用的'Bool'类型的非可选表达式 .

由于我的密钥可能没有值,我不想强行打开它 . 现在显然它的工作方式是这样的,但是如何在没有快速抱怨的情况下安全地展开 Value 呢?

我也试过用卫兵......

3 回答

  • 1

    正如doc中所建议的:

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

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

    它不再是可选的 . 因此您不需要使用 if let 进行强制转换 .

    你可以直接使用:

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

    Apple文件说:

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

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

    Initializer for conditional binding must have Optional type, not 'Bool'

    希望这能帮助你 .

相关问题