为什么字典中的这个常量没有展开?

Why is this constant from a Dictionary not unwrapped?

我正在使用一些基本 swift 功能,事实上您可以使用 if 展开可选值。我正在研究 swift 4 和 Xcode 10.3

let xyz: String? = nil

if let unwrappedValue = xyz {
    print("This is unwrapped")
} else {
    print("This is not unwrapped") // Program goes there
}

我制作了一个包含 Optional 值作为元素的字典,当我尝试打开它时,它并没有打开变量,而是保留了 Optional 值。

var referenceDatesIdentifiers: [String: Date?] =
    ["ReferenceDateIdentifier": nil]

if let referenceDate = referenceDatesIdentifiers["ReferenceDateIdentifier"] {
   referenceDateLabel.text = otherDateFormater.string(from: referenceDate!) // ReferenceDate is Optional and not unwrapped
}

为什么 referenceDate 没有展开?

我试图以常量导出字典的元素,但同样的问题,它没有解包

let refDateOpt = referenceDatesIdentifiers["ReferenceDateIdentifier"]
if let referenceDate = refDateOpt {
    referenceDateLabel.text = otherDateFormater.string(from: referenceDate!) // Reference date is also Optional and not unwrapped
}

发生了什么事?

您应该再次要求可选地使用类型转换解包日期将解决您的问题。更新代码如下:

if let referenceDate = referenceDatesIdentifiers["ReferenceDateIdentifier"] as? Date {
    print(referenceDate)
}

这里的问题是创建一个值为 nil 的字典没有任何意义。因此,我没有在添加值之前检查键是否存在,而是添加值并使用 if let

检查值

最后,这就是答案

    var referenceDatesIdentifiers: [String : Date] = [:]
    if let referenceDate = referenceDatesIdentifiers["ReferenceDateIdentifier"] {
       referenceDateLabel.text = otherDateFormater.string(from: referenceDate)
    }

您可以使用以下方式。它将工作 perfectly.Update 代码如下:

var referenceDatesIdentifiers: [String: Date?] =
["ReferenceDateIdentifier": nil]
if let refDateOpt = referenceDatesIdentifiers["ReferenceDateIdentifier"] as? Date {
print(refDateOpt)

}

if let refDateOpt = referenceDatesIdentifiers["ReferenceDateIdentifier"]{
if let referenceDate = refDateOpt {
    print(referenceDate)
}

}