【Swift】Enum(列挙型)の使い方。データ型を自作する。(Swift 2.1、XCode 7.2)
Enum(列挙型)の宣言
Enum(列挙型)とは、変数のとりうる値が少ない場合に自作して使うデータ型のことであり、以下のように宣言する。
1 2 3 4 5 6 |
enum 型名 { case 値 case 値 case 値 ・・ } |
例えば、ゴルフコースの種類の変数で、とりうる値が「パー3、パー4、パー5」だけの場合、変数をInt型とするのでは無く、「パー3、パー4、パー5」の3種類の値のみ許される自作のデータ型を作り、変数の値に代入する。
これにより、変数の値が意味するものが一目で分かるのと、変数に設定できる値を制限できるメリットが生まれる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
//GolfCourse型を作る enum GolfCourse { case PAR3 case PAR4 case PAR5 } //GolfCourse型の変数を作る var course = GolfCourse.PAR3 print(course) //実行結果 //PAR3 |
Enumの変数を作ったあとに変数の値を変更するときは、型名は省略することができる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
//GolfCourse型を作る enum GolfCourse { case PAR3 case PAR4 case PAR5 } //GolfCourse型の変数を作る var course = GolfCourse.PAR3 //変数の値を変更 course = .PAR4 print(course) //実行結果 //PAR4 |
Enum(列挙型)を使う
普通の変数と同じように、条件分岐や制御構文の条件式の中で使うことができる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
//GolfCourse型を作る enum GolfCourse { case PAR3 case PAR4 case PAR5 } //GolfCourse型の変数を作る var course = GolfCourse.PAR3 //変数の値を調べる if(course == GolfCourse.PAR3){ print("短いコースです") } else if(course == GolfCourse.PAR5){ print("長いコースです") } //実行結果 //短いコースです |
しかし、上記のままではPAR3、PAR4、PAR5の大小比較ができない。そこで、以下のようにEnumの値に紐づく別のデータ値を定義する。対応データ型はInt、Double、Stringなど何でも構わない。
1 2 3 4 5 6 7 |
enum 型名:対応データ型 { case 値 = 対応データ値 case 値 = 対応データ値 case 値 = 対応データ値 ・・・ } |
例えば、PAR3、PAR4、PAR5のそれぞれの最大ヤード(距離)をInt型の整数値として持たせておくには以下のコードのように定義する。変数.rawValueで整数値を取得すれば、変数同士を比較したり、変数を計算式の中で利用できる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
/* * Enum(列挙型)に整数値を設定する。 * ravValueで整数値を取得する。 */ //GolfCourse型を作る enum GolfCourse:Int { case PAR3 = 250 case PAR4 = 470 case PAR5 = 690 } //GolfCourse型の変数を作る var course1 = GolfCourse.PAR3 var course2 = GolfCourse.PAR5 //変数の値を比較する if(course1.rawValue > course2.rawValue){ print("\(course1)の方が長いコースです") } else{ print("\(course2)の方が長いコースです") } //実行結果 //PAR5の方が長いコースです |
Int型の対応データ値を省略した場合は、0から順番に連番が振られる。省略していない値がある場合は、その値をインクリメントして連番が振られる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
import UIKit /* * 対応データ値を省略した場合 */ //GolfCourse型を作る enum GolfCourse:Int { case PAR3 case PAR4 = 100 case PAR5 case PAR6 } //対応データ値を確認 var course = GolfCourse.PAR3 print(course.rawValue); course = .PAR4 print(course.rawValue); course = .PAR5 print(course.rawValue); course = .PAR6 print(course.rawValue); //実行結果 //0 //100 //101 //102 |
Enum(列挙型)に関数を定義する
Enum型の中で関数を定義し、自作したデータ型の変数に対して自作したメソッドを呼び出せるようにしておける。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
/* * 自作メソッドの例 */ //GolfCourse型(Int型の数値を持たせる) enum GolfCourse:Int { case PAR3 = 7 case PAR4 = 5 case PAR5 = 6 //自作メソッド(Int型数値の合計を返す) func allCource() -> Int { return GolfCourse.PAR3.rawValue + GolfCourse.PAR4.rawValue + GolfCourse.PAR5.rawValue } } var test = GolfCourse.PAR3 //自作メソッドを呼び出す print(test.allCource()) //実行結果 //18 |