【发布时间】:2014-06-11 19:10:19
【问题描述】:
根据 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!]
但在第二个示例中,“?”都不是。或者 ”!”一个在语法中使用?
【问题讨论】:
标签: swift optional optional-variables optional-values