1

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つは構文で使用されていますか?

4

2 に答える 2

0

?オプションの型を明示的に宣言する演算子です。!オプションを強制アンラップする演算子です。この例の構文は、1 つの簡潔な行でチェックとアンラップを行うための特別な Swift の短縮形です。nameIndex「の結果に代入し、findName(...)そうでない場合nilは次のコードを実行してください: ...」</p>

于 2014-06-11T19:12:16.893 に答える