不可预测(不明显)nil
检查:
这个功能:
fileprivate func isPurchased(_ name: String) -> Bool {
if let _ = dictionary[name] {
return true
} else {
return false
}
}
返回true
:
fileprivate var dictionary = [String: Double?]()
和false
[String: Double]
(这是正常的)。为什么呢?
我像这样初始化dictionary
:
dictionary["test"] = nil
我的意思是:
isPurchased("test")
会为true
[String: Double?]
和
isPurchased("test")
会为false
[String: Double]
更新
var dictionary = [String: Double?]()
dictionary["test"] = nil
print("\(isPurchased("test"))")
打印true
var dictionary = [String: Double]()
dictionary["test"] = nil
print("\(isPurchased("test"))")
打印false
为什么?
答案 0 :(得分:2)
首先,如果要检查某些事情是否为零,请不要使用。只需使用value == nil
正如评论中所讨论的,从类型[String: Double?]
的字典中获取带有下标的值会产生双重可选(Double??
)。
这意味着dictionary[name]
的值为Optional.some(Optional.none)
。
要解决这个问题,您可以执行以下操作:
if let value = dictionary["test"], value != nil