为什么';如果让';在Xcode 8.3 beta版的Swift 3中,似乎没有像以前那样取消绑定值?

为什么';如果让';在Xcode 8.3 beta版的Swift 3中,似乎没有像以前那样取消绑定值?,swift,if-statement,swift3,let,unboxing,Swift,If Statement,Swift3,Let,Unboxing,与以前不同,我惊讶地看到“title”现在是可选的(编译器现在生成衰减:字符串插值生成可选值的调试描述;您的意思是显式的吗?) “if let title=”表达式如何不再对其进行解装箱? 我应该如何在if中取消装箱 // Go thru all publication where the tag has been found for item in items { if let item = item as? [String: String?], let title = item["lab

与以前不同,我惊讶地看到“title”现在是可选的(编译器现在生成衰减:字符串插值生成可选值的调试描述;您的意思是显式的吗?)

“if let title=”表达式如何不再对其进行解装箱? 我应该如何在if中取消装箱

// Go thru all publication where the tag has been found
for item in items {
  if let item = item as? [String: String?], let title = item["label"] {
    i += 1
    if let rawSummary = item["libSousTheme"] {
      print("\(i)) Tag [\(foundTag)] z[\(foundZTag)] in « \(title) »")
    }
    else {
      print("\(i)) Tag [\(foundTag)] z[\(foundZTag)] in « \(title) » (no summary!)")
    }
  }
}

好的,那么这样做可以解决问题:

如果让项目=项目为?[String:String?],让title=item[“label”]??无{ /* … */
}
title
在Swift 3.1之前应该是可选的,因为您正在转换到
[String:String?]
,字典的下标使用
nil
表示键缺少值(因此您可以为
项[“label”]
获得双包装可选)。通常,您永远不希望字典具有可选的
类型–只需使用非可选的
类型,并使用
nil
指示键缺少值(即转换为
as?[String:String]
)。但如何区分键的不存在值和具有nil值的键@如果您想再次包装它,只需将您必须更改的内容
let title=item[“label”]更改为?字符串
,它将按照您要求的方式工作。相关:&&&
项[“标签”]??nil
是另一种选择,如中所示