Apple の Swift ガイドによると、次の配列と、配列を検索する次の関数がある場合:
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
}
nil
...したがって、この関数によって返された Optional Int をキャプチャし、次の方法でそれがどうかを確認できます。
let nameIndex: Int? = findName("Lisa", arrayToSearchIn: namesArray)
if nameIndex {
println("found \(namesArray[nameIndex!])")
}
else {
println("NOT found")
}
これで問題ありませんが、2 つのステートメントを 1 つにまとめてコードを合理化する次の例では、オプションの "?" が突然削除されるため、混乱します。と "!" それらの構文から:
if let nameIndex = findName("Lisa", arrayToSearchIn: namesArray) {
println("found \(namesArray[nameIndex])")
}
そして、これは完全にうまく機能します。
nameIndex
では、最初の例で "?" を使用して宣言されたのはなぜですか。- そのようです:
nameIndex:Int?
強制アンラップは「!」を使用して発生します。
[nameIndex!]
しかし、2 番目の例ではどちらも "?" ではありません。また "!" 1つは構文で使用されていますか?