[Swift] Enum(列挙型)に入門する
こんにちは、@yoheiMuneです。
どの言語でもよく利用されるEnum(列挙型)ですが、Swiftでの使い方を学んだのでブログに残しておきたいと思います。
列挙型を使うには以下のように行います。
The Swift Programming Language (Swift 2.2): Enumerations
また、以下の記事ではさらに詳しくEnumを説明していますので、気になる方は見てみてください。
Swiftの列挙型(enum)おさらい - Qiita
最後になりますが本ブログでは、Swift・Python・Java・フロントエンド・機械学習など雑多に情報発信をしていきます。自分の第2の脳にすべく、情報をブログに貯めています。気になった方は、本ブログのRSSやTwitterをフォローして頂けると幸いです ^ ^。
最後までご覧頂きましてありがとうございました!
どの言語でもよく利用されるEnum(列挙型)ですが、Swiftでの使い方を学んだのでブログに残しておきたいと思います。
目次
Enumを定義する/利用する
Swiftで列挙型を使う場合には、以下のように定義することで利用できます。enum Color { case Blue case Red case Yellow }または、case文を1行で以下のように書くこともできます。
enum Color { case Blue, Red, Yellow }どっちで書いてもいいですが、個人的にはcase毎に行を分ける方が読みやすい気がします。
列挙型を使うには以下のように行います。
// 列挙型を変数に代入する let color1 = Color.Blue // 変数の型が指定されている場合には、.RedとEnum名を省略できる let color2: Color = .Red // 出力するとプロパティ名が見える(あまり使いませんが) print(color1, color2) // Blue Red
Enumの中身の型を指定する
以下のようにすることで、Enumの中身の型を指定することができます。// Int型を指定した例 enum Status: Int { case Valid case Invalid }型を指定すると、
rawValue
プロパティを使って値を取り出すことができるようになります。let status1 = Status.Valid let status2 = Status.Invalid print(status1.rawValue) // 0 print(status2.rawValue) // 1また、値からEnumを取得することもできます。
let status1 = Status.init(rawValue: 0) print(status1) // Optional(Status.Valid) let status2 = Status.init(rawValue: 0) print(status2) // Optional(Status.Invalid) // 存在しない数値を指定したら、nilになります let status3 = Status.init(rawValue: 10) print(status3) // nil
Enumの中に独自関数を定義する
SwiftのEnumでは、Enum内に独自関数を定義することができます。enum Signal: String { case Blue = "進め" case Yellow = "注意" case Red = "止まれ" // 独自関数を定義 func say() { print(self.rawValue + "だよー") } }そして、以下のように呼び出すことができます。
let signal1 = Signal.Blue signal1.say() // 進めだよー
Enumのプロパティ毎に異なる値を持たせる
これはなかなか独特ですが、SwiftのEnumではプロパティ毎に異なる情報を保持させることができます。enum Job { case Planner case Designer(String, Int) case Engineer(String, Int, String) } let job1 = Job.Planner let job2 = Job.Designer("Web系", 400) let job3 = Job.Engineer("ゲーム系", 500, "大変だ") print(job1) // Planner print(job2) // Designer("Web系", 400) print(job3) // Engineer("ゲーム系", 500, "大変だ")これをどうやって使うんだろうと思っていたら、どうも
switch
文で使えるようです。switch(job2) { case let .Designer(name, salary): print("Designer: \(name) \(salary)") // Designer: Web系 400 break }また、以下のように名前付きの引数にすることもできるようです。
enum Direction { case North(direction: String, message: String) } let direction = Direction.North(name: "北", description: "危ない方向")いろいろとSwiftのEnumはできるなーと思いました。
参考資料
この記事を書くために、以下の記事を参照しました。ありがとうございます。The Swift Programming Language (Swift 2.2): Enumerations
また、以下の記事ではさらに詳しくEnumを説明していますので、気になる方は見てみてください。
Swiftの列挙型(enum)おさらい - Qiita
最後に
列挙型はいろいろな言語で使いますが、SwiftのEnumはいろいろと柔軟に作られていますね。Enumの定義位置も、グローバルはもちろんの事、クラス内やメソッド内でも定義できる柔軟性があります。便利なので今後いろいろと使ってみようと思います。最後になりますが本ブログでは、Swift・Python・Java・フロントエンド・機械学習など雑多に情報発信をしていきます。自分の第2の脳にすべく、情報をブログに貯めています。気になった方は、本ブログのRSSやTwitterをフォローして頂けると幸いです ^ ^。
最後までご覧頂きましてありがとうございました!