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

问题描述 投票:0回答:3

我正在使用一些基本的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不展开?

我试图以恒定的方式导出字典的elem,但同样的问题,它没有被解开

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

发生了什么事?

swift xcode optional
3个回答
0
投票

您应该再次要求选择强制类型转换的日期来解决您的问题。更新代码如下:

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

0
投票

这里的问题是,创建一个nil值的字典没有任何意义。因此,我只需要添加值并使用if let

检查值,而不是在添加值之前检查键是否存在。

最后,这就是答案

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

0
投票

您可以使用以下方式。它将完美运行。更新代码如下:

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)
}

}

© www.soinside.com 2019 - 2024. All rights reserved.