スライドショー

【Swift入門】enumの使い方をわかりやすくまとめてみた

Swiftでは同じ用途で使用するデータなどを一つにまとめて管理する列挙型(enum)があります。

この記事では、

・列挙型とは
・enumの定義と使い方
・型を省略する方法
・if文で比較する方法
・値を設定する方法

というenumの基本的な解説から、

・入れ子にする方法
・イニシャライザを使用する方法
・引数を指定する方法

などの応用的な使い方に関しても解説していきます。

今回はそんな列挙型(enum)の使い方についてわかりやすく解説します!

※この記事ではSwift4.0を使用しています。

列挙型とは

列挙型(enum)とは関連性のある事柄、データを一つにまとめた定数のようなものです。

列挙型は構造体やクラスを管理するよりも簡単にデータ構造の管理ができますし、ソースコードの可読性を向上させることができまます。

たとえば、果物を管理するFruits列挙体を作り、その中にAppleやMelonなどを入れて管理したいときは以下のように定義します。

列挙体の定義:

enum Fruits {
    case apple
    case orange
    case melon
    case banana
    case pineapple
}

列挙体はenumを記述したあとに列挙体を管理する定数名を記述し、波カッコ{}で囲んだ中で「case 列挙子」のように記述します。

enumを使う ~基礎編~

定義と使い方

ここでは、列挙体enumの基本的な使い方を見ていきましょう。

以下に列挙体を定義して、値を参照する簡単なサンプルを紹介します。

サンプルプログラム

//列挙体の定義
enum Fruits {
    case apple
    case orange
    case melon
    case banana
    case pineapple
}

//列挙体の要素を取得
let basket = Fruits.apple

print(basket)

実行結果:

apple

上記のサンプルでは列挙体Fruitsを定義し、波カッコ{}の中でcaseでapple、orangeなどの列挙子を指定しています。

列挙体を参照するには「列挙体名.列挙子」と記述します。

尚、型の中の列挙子名は以前指定した変数名などを使用できますが、1つの型で同じ値名を使用することはできません。

型を省略

enum型の変数を作った後に変数の中身の値を参照したい場合は、enum型の変数名を省略して、「.」から要素名を指定して参照することもできます。

サンプルプログラム

//列挙体の定義
enum Fruits {
    case apple
    case orange
    case melon
    case banana
    case pineapple
}

//列挙体の要素を取得
var basket: Fruits
basket = .apple

print(basket)

実行結果:

apple

上記のようにenum型の変数名を指定しないでも、値が参照できることがわかりますね!

if文で比較してみる

if文を使って変数内に入っているenumの定数が特定の値と一緒かどうかを調べることもできます。

以下にif文を使用してenumの値が一致するかを確認するサンプルを紹介します。

サンプルプログラム

//列挙体の定義
enum Fruits {
    case apple
    case orange
    case melon
    case banana
    case pineapple
}

let basket = Fruits.melon

//if文による比較
if ( basket == .apple ) {
    print("This is an apple.")
} else if ( basket == .orange ) {
    print("This is an orange.")
} else if ( basket == .melon ) {
    print("This is an melon.")
} else if ( basket == .banana ) {
    print("This is an banana.")
} else if ( basket == .pineapple ) {
    print("This is an pineapple.")
} else {
     print("It does not apply to any")
}

実行結果:

This is an melon.

このようにenumの値をif文による条件分岐で使えることがわかりますね!

もちろんswitch文でも同様に使用することもできます。

if文、switch文の使い方については、以下の記事で詳しく解説しています!


【Swift入門】Switch文による条件分岐をマスターしよう!
更新日 : 2017年9月7日

値を設定する

列挙型の中の要素には、値を設定することもできます。

例えばFruitsの型の中の要素それぞれにりんご、メロン、オレンジという値を設定するには、

enum Fruits: String {
    case apple = "りんご"
    case orange = "オレンジ"
    case melon = "メロン"
    case banana = "バナナ"
    case pineapple = "パイナップル"
}

とします。

そして、りんごを定数basketとして指定したい場合rawValueを使います。

let basket = Fruits.apple.rawValue

この結果、定数basketが指定しているのは「りんご」です。

enumを使う ~応用編~

入れ子にする

enumも入れ子として使用することができます。

例えば日曜日、月曜日、火曜日のいずれかの夕ご飯を決めるときは以下のように記述します。

サンプルプログラム

//列挙体の定義
enum Weekly {
   enum Dinner {
    case Pasta
    case Curry
    case Tenpura
  }
    case Sunday
    case Monday
    case Tuesday
}
let Week = Weekly.Sunday
let Dinner = Weekly.Dinner.Curry

print(Week)
print(Dinner)

実行結果:

Sunday
Curry

イニシャライザとは

イニシャライザとは、クラスのインスタンスを生成するときに、クラスのプロパティなどを初期化する目的で、自動で呼び出される処理のことを言います。

イニシャライザを使用することでクラスの記述内容がより分かりやすくなり、明確に初期化を行いソースコードの安全性を高めることができます。

インスタンスを生成と同時にメソッドを呼び出すにはinitメソッドを定義します。

そんなイニシャライザですが、enumで使用することもできます。

enumで使用するには、enumの波カッコ{}の中でinitメソッドを定義して、初期化を行います。

以下にenum内でinitメソッドを定義して、初期化を行うサンプルを紹介します。

サンプルプログラム

//列挙体の定義
enum Fruits {
    case apple
    case orange
    case melon
    case banana
    case pineapple
    
    init(){
        self = Fruits.apple
    }
}
 
//インスタンスを生成
let cl = Fruits()

print(cl)

実行結果:

apple

上記のサンプルではenum Fruits内でinitメソッドを定義しています。

初期化処理を行うにはクラスのようにenumに対してインスタンスの生成を「cl = Fruits()」のように記述して行います。

前述したようにインスタンスの生成と同時にinitメソッドが呼び出されて、処理が行われます。

イニシャライザについては、以下の記事でも詳しく解説しています!

引数を設定

enumのcaseで指定した列挙子では引数を指定することもできます。

引数を指定するときは、メソッドのように列挙子のあとにカッコ()で囲って、その中に引数を指定します。

以下にenumの列挙子に引数を指定するサンプルを紹介します。

サンプルプログラム

//列挙体の定義
enum Fruits {
    case apple(price: Int)
    case orange(price: Int)
    case melon(price: Int)
    case banana(price: Int)
    case pineapple(price: Int)
}

//引数を指定する
let basket1 = Fruits.apple(price: 100)
let basket2 = Fruits.orange(price: 80)

print(basket1)
print(basket2)

実行結果:

apple(100)
orange(80)

上記のサンプルではenumの列挙子に引数を指定するために、「Fruits.apple(price: 100)」のように記述して引数を指定します。

メソッド同様enum側の引数の変数名、型も合わせておく必要があります。

まとめ

ここでは列挙型(enum)について、

・列挙型とは
・enumの定義と使い方
・型を省略する方法
・if文で比較する方法
・値を設定する方法
・入れ子にする方法
・イニシャライザを使用する方法
・引数を指定する方法

などについて解説しました。

列挙型のenumは同じ用途で使用する変数をまとめて管理したいときに非常に便利ですので、積極的に活用していきましょう。

もしenumの使い方を忘れてしまったら、この記事を思い出してくださいね。

LINEで送る
Pocket

無料でSEからWebエンジニアへ転職しませんか?



侍エンジニア塾では、完全未経験の方から現在SEだけどプログラミングはやっていないという経験者まで、幅広い方々の人生を好転させるプログラミング指導を行ってきました。SEの方とお話していくなかで、

  • システムエンジニアという職業だけどコードが書けない
  • 事務作業が多くスキルがないため将来が不安
  • スクールに通うと完全未経験者と同じスタートになるからレベルが合わない
という、すでに知識があるSEならではのお悩みがあることに気づきました。そんな方におすすめなのが、弊社の「転職コース 」です。

弊社では、マンツーマンでレッスンを行いますので、現在お持ちの知識レベルからカリキュラムを作成いたします。さらにこちらの転職コースは無料で受講を始められて転職成功でそのまま卒業できるというとてもお得なコースとなっています。

既に知識のあるSEといっても転職は年齢が若いほど受かりやすいため、まずは無料体験レッスンで今の現状や理想の働き方について一緒に考えていきましょう。

まずは無料体験レッスンを予約する

書いた人

ヤマシタ

システムエンジニアとして10年勤務→フリーランスへ。現在は侍ブログ編集部としてこれまでに200記事以上の記事を執筆。
大規模システム開発からWebアプリ開発まで経験あり。最近ではPythonの機械学習に挑戦中。

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説