根据 Apple 的 Swift 指南,当您拥有以下 Array 和以下函数来搜索 Array 时:
let namesArray = ["John", "Lisa", "Bill", "Jennifer"]
// Note this function is set-up to return an OPTIONAL Int:
func findName (personName:String, arrayToSearchIn:String[]) -> Int? {
for (indexOfName, nameValue) in enumerate(arrayToSearchIn) {
if nameValue == personName {
return indexOfName
}
}
return nil
}
...因此您可以通过以下方式捕获此函数返回的 Optional Int - 然后检查它是否存在nil
:
let nameIndex: Int? = findName("Lisa", arrayToSearchIn: namesArray)
if nameIndex {
println("found \(namesArray[nameIndex!])")
}
else {
println("NOT found")
}
这一切都很好 - 但他们的下一个示例,他们通过将 2 个语句合并为一个来简化代码 - 让我感到困惑,因为他们突然放弃了可选的“?” 和 ”!” 从他们的语法:
if let nameIndex = findName("Lisa", arrayToSearchIn: namesArray) {
println("found \(namesArray[nameIndex])")
}
这非常有效。
那么为什么在第一个示例nameIndex
中声明为“?” - 像这样:
nameIndex:Int?
并且使用“!”进行强制展开
[nameIndex!]
但在第二个例子中既不是“?” 或者 ”!” 一个在语法中使用?