Swiftのenum(列挙型)のざっくりまとめ
Objective-Cの列挙型といえば、C言語と同じく整数型の値を複数持つものでしたが、Swiftの列挙型ではかなり柔軟かつ多機能なものになっています。
その列挙型について少しまとめてみました。
定義
enum Fruits { //定数なのでアッパーキャメルケースで記述 case Apple case Orange case Grape case Banana //以下のようにも記述できる case Apple, Orange, Grape, Banana }
列挙型のメンバは定数や変数に代入可能
var f1 = Fruits.Apple let f2: Fruits = .Orange
2種類の列挙型
C言語ではメンバには整数型の値を格納することができましたが、Swiftでは値型と共用型の列挙型があります。
- 値型の列挙型 : 全メンバが同じデータ型を持つ. 実体型(raw type)の指定が必要
- 共用型の列挙型 : それぞれのメンバが異なる構造を持つ. 実体型の指定はしない.
// 値型の列挙型 enum Weather: Int { case Sunny = 0 case Cloudy // 1 case Rainy // 2 case Thunder // 3 } //値型の場合、rawValueで参照することができる let w = Weather.Sunny w.rawValue // w = 0 (Int) //共用型の列挙型 enum Ticket { case Single(Int, Date, Child: Bool) //タプルで型の定義 case OneDayPass(Date, Child: Bool) case SeniorPass String //文字列で型の定義 case Card(Int, Child: Bool) }
共用型では型がまったく異なるものをひとまとまりにできて便利に使えそうです.
列挙型でできること
Swiftの列挙型では、ただ単にまとまりのあるデータを定義するだけでなく、構造体やクラスと同等の機能が備わっています。 具体的には以下の通りです.
以下は具体的なコード例です.
//メソッドの定義 enum Fruits { case Apple case Orange case Grape case Banana func description() -> String { switch self { case .Apple: return "Apple" case .Orange: return "Orange" case .Grape: return "Grape" case .Banana: return "Banana" } } }
//タイプメソッドの定義 enum Fruits { case Apple case Orange case Grape case Banana //staticをつける static func description() -> String { return ["Apple","Orange","Grape","Banana"][self.rawValue] } }
//計算型プロパティの定義 enum Fruits { case Apple case Orange case Grape case Banana var sphere: Bool { switch self { case .Apple, .Orange: return true default: return false } } }
//イニシャライザの定義 enum Fruits { case Apple case Orange case Grape case Banana init() { self = Fruits.Apple } } //実行 var f = Fruits() // .Apple
ざっくりとですが、Swiftでの列挙型をまとめてみました。Objective-Cでの列挙型と比べるとすごい高機能なので、いろいろ便利に使っていきたいです。
また、列挙型ではprotocolに準拠することもできるみたいなので、そこらへんも後々触っていけたらなと思います。