スウィフトの列挙


つの私の好きなことについて話してみましょう迅速な-列挙(またはenums短い).enumerationは、関連する値の特定の限られたセットを作成することができます.それらは、要素が厳密に設定されたオプションによって制限される状況において容易に適用することができ、徹底的に処理するために非常に有用である.
ENUMはファーストクラス型で、計算されたプロパティやインスタンスメソッド(クラス、構造体、およびenum hereの詳細については)のように、クラス型に特に適用される関数や機能を取ることができます.
enumはenumキーワードで宣言されます.そして、資本化された名前が続きます、そして、可能なenumオプションとして機能するケースのリスト.ケースは別々の行に表示できます.それぞれのケースはフロントの場合、またはコンマで区切られた1行のすべてがあります.ペット店で利用できるペットの可能なタイプをリストするenumを使いましょう.
enum Animal {
    case cat
    case dog 
    case rabbit
    case hamster
    case snake
    case turtle
    case fish
    case bird
}
Or
enum Animal {
    case cat, dog, rabbit, hamster, snake, turtle, fish, bird
}
どちらの形式も許容できますが、長いケースは、1行とは対照的に別々の行の格文としてリストされて読みやすくなります.
enum型の値を宣言するには、
var thatKittyInTheWindow = Animal.cat
または型を代入し、ドット構文でケースを指定します.すでに特定のenumをリストするのは不必要です.
var thatKittyInTheWindow: Animal = .cat
列挙されたケースが完全にswitch文とペアを組むので、列挙体の特異性はその利点の1つです.switchステートメントは' switch ' (本質的に'オプションを選択します)に基づいて、どちらのケースがそれに渡され、あなたがコード化した適切なアクションを取ります.
全てのオプションはswitch文でカバーされなければなりません.すべての可能な場合にオプションが存在しなければなりません.オプションが指定されないならば、コンパイラは文句を言います.同じ結果を生成するオプションが必要な場合は、それらをグループ化することもできます.デフォルトのステートメントを含めることもできます.これらの動物が作るかもしれない音を使用して例を見てみましょう.
switch Animal {
case .cat:
    print(“Meow”)
case .dog: 
    print(“Woof”)
case .rabbit, .hamster:
    print(“Squeak”)
case .snake:
    print(“Hisss”)
case .bird:
    print(“Tweet”)
default:
    print(“…”)
}
ここでは、.カメと.一方、魚の場合は、デフォルトのステートメントを旅行します.ウサギと.ハムスターケースは一緒に置かれて、同じ印刷声明に終わります.
ENUMは、各ケースに関連付けられた生の値を持つこともできます.これらの生の値は文字列、文字、intsやdoublesのような数値型だけの基本型です.enumに生の値を追加します.
enum Animal: String {
    case cat
    case dog 
    case rabbit
    case hamster
    case snake
    case turtle
    case fish
    case bird
}
ここでは、enumに生の文字列値を割り当てました.デフォルトでは、これはcaseキーワードの文字列バージョンである各ケースに対して生の値を生成します.動物のための生の値にアクセスすること.例えばcatは“cat”を生成するので、以下の値はcatとなります.
var thatKittyInTheWindow: Animal = .cat
let value = thatKittyInTheWindow.rawValue
intを生の値として割り当てると、ゼロインデックスに基づいて自動的に各値に整数値が割り当てられます.これは、最初のケース項目のインデックスを指定した場合にも動作します.
enum Animal: Int {
    case cat = 1
    case dog 
    case rabbit
    case hamster
    case snake
    case turtle
    case fish
    case bird
}
ここでは、犬は2、ウサギ3などの生の値を持つでしょう.もちろん、コンパイラは自動的にそれを処理させるのではなく、それぞれの生の値を常に特定のものに指定することもできます.おそらくここでは、生の値を介してペットショップの価格を各動物に割り当てるか、名前を与える.
enum Animal: String {
    case cat = “Socks”
    case dog = “Buddy”
    case rabbit = “Thumper”
    // and so on
}
生の値が基本的に受け入れられたタイプのうちの1つである限り、それは割り当てられることができます.一度設定されると、どんなenumケースの生の値も常に同じです.上記の状況は、それぞれのタイプのペットのうちの1つを持っていた場合、実際には実用的なことではありません.
しかしながら、この問題は関連した値で改善されることができます.関連する値はenumの場合は'連想'ですが、型としてのみ指定されます.実際の値は、そのENUMケースの型を宣言するときに設定されます.この方法では、文字列を各動物に関連付けることができます.これは、名前の名前です.
enum Animal {
    case cat(String)
    case dog(String) 
    case rabbit(String) 
    case hamster(String) 
    case snake(String) 
    case turtle(String) 
    case fish(String) 
    case bird(String) 
}
今、私たちは適切な名前を与えられた動物を確実にすることができます.
let thatKittyInTheWindow: Animal = .cat(“Tiger”)
let thatPuppyInTheWindow: Animal = .dog(“Lily”)
それから、これらの関連した値は、同様にスイッチ声明において、使うことができる.
switch Animal {
    case .cat(let name):
    print(“Kitty’s name is \(name)”)
    case .dog(let name):
    print(“Doggie’s name is \(name)”)
    // and so on
}
ここでは、関連付けられた値を定数に代入し、文字列interpolationを使用してprint文に追加します.
あなたが見ることができるように、特に徹底的で読みやすいコードのためにスイッチ声明で彼らをペアリングすることによって、特にenumsをあなたの利点に使う方法の可能性はたくさんあります.そこにはさらに多くの用途があります-この短いレッスンは基本をカバーしました、しかし、あなたがmoreに掘り下げたいならば、ドキュメントはさらに具体的な詳細を含みます.