if let seen: Bool = defaults.bool(forKey: UtilitiesKeys.mainTutorialSeen) {
return seen
}
return false
如果我这样做,swift给我一个问题:
Bool' Bool'到布尔'总是成功,非选择性 表达类型' Bool'用于检查选项。
由于我的钥匙可能没有价值,我不想强行打开它。现在很明显它是这样工作的,但是如何在没有迅速抱怨的情况下安全地展开价值呢?
我也试过使用后卫......
答案 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