为什么字典中的这个常量没有展开?
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)
}
}
我正在使用一些基本 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)
}
}