Swift-optionals

提供:Dev Guides
移動先:案内検索

Swift-オプション

Swift 4は、値の不在を処理する Optionals タイプも導入します。 オプションでは、「値があり、xと等しい」または「値がまったくない」と表示されます。

Optionalはそれ自体がタイプで、実際にはSwift 4の新しい超強力な列挙型の1つです。 2つの可能な値、 None と* Some(T)があります。ここで、 *T は、Swift 4で使用可能な正しいデータ型の関連付けられた値です。

これはオプションの整数宣言です-

var perhapsInt: Int?

これはオプションの文字列宣言です-

var perhapsStr: String?

上記の宣言は、値を意味しない nil に明示的に初期化することと同等です-

var perhapsStr: String? = nil

Swift 4でオプションがどのように機能するかを理解するために、次の例を見てみましょう-

var myString:String? = nil

if myString != nil {
   print(myString)
} else {
   print("myString has nil value")
}

プレイグラウンドを使用して上記のプログラムを実行すると、次の結果が得られます-

myString has nil value

オプションは、Objective-Cでポインターを使用して nil を使用するのと似ていますが、クラスだけでなく、どのタイプでも機能します。

強制開封

変数を optional として定義した場合、この変数から値を取得するには、 unwrap する必要があります。 これは、変数の最後に感嘆符を付けることを意味します。

簡単な例を見てみましょう-

var myString:String?

myString = "Hello, Swift 4!"

if myString != nil {
   print(myString)
} else {
   print("myString has nil value")
}

プレイグラウンドを使用して上記のプログラムを実行すると、次の結果が得られます-

Optional("Hello, Swift 4!")

今、変数の正しい値を取得するためにアンラッピングを適用しましょう-

var myString:String?

myString = "Hello, Swift 4!"

if myString != nil {
   print( myString! )
} else {
   print("myString has nil value")
}

プレイグラウンドを使用して上記のプログラムを実行すると、次の結果が得られます。

Hello, Swift 4!

自動展開

疑問符の代わりに感嘆符を使用して、オプションの変数を宣言できます。 このようなオプションの変数は自動的に展開され、割り当てられた値を取得するために変数の最後に感嘆符を追加する必要はありません。 簡単な例を見てみましょう-

var myString:String!
myString = "Hello, Swift 4!"

if myString != nil {
   print(myString)
} else {
   print("myString has nil value")
}

プレイグラウンドを使用して上記のプログラムを実行すると、次の結果が得られます-

Hello, Swift 4!

オプションのバインディング

オプションのバインディングを使用して、オプションに値が含まれているかどうかを確認し、含まれている場合は、その値を一時的な定数または変数として使用できるようにします。

*if* ステートメントのオプションのバインディングは次のとおりです-
if let constantName = someOptional {
   statements
}

オプションのバインディングの使用法を理解するために簡単な例を見てみましょう-

var myString:String?
myString = "Hello, Swift 4!"

if let yourString = myString {
   print("Your string has - \(yourString)")
} else {
   print("Your string does not have a value")
}

プレイグラウンドを使用して上記のプログラムを実行すると、次の結果が得られます-

Your string has - Hello, Swift 4!