不可预测的零检查结果

时间:2017-01-30 14:28:21

标签: swift dictionary

不可预测(不明显)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

为什么?

1 个答案:

答案 0 :(得分:2)

首先,如果要检查某些事情是否为零,请不要使用。只需使用value == nil

即可

正如评论中所讨论的,从类型[String: Double?]的字典中获取带有下标的值会产生双重可选(Double??)。

这意味着dictionary[name]的值为Optional.some(Optional.none)

要解决这个问题,您可以执行以下操作:

if let value = dictionary["test"], value != nil