LoginSignup
6
8

More than 5 years have passed since last update.

swiftのenumについて(3.0.1)

Last updated at Posted at 2016-12-07

背景

swiftの勉強を始めてみて、enum(列挙型)の仕様や使い方がよくわからなかったので、公式ドキュメントを読みながらまとめてみました。

Appleの公式ドキュメントを参考にしました。

enumの概要

swiftのEnumerationsの説明の一行目には以下とあります。

An enumeration defines a common type for a group of related values and enables you to work with those values in a type-safe way within your code.

つまり、列挙型は関連する値の集合を共通するタイプとして定義し、それらの値を型安全に使用することができます、ということでしょうか。

仕様・使い方

基本の使い方

単純な形としては以下のように使うことができます。
・enum名の最初の文字は大文字で書く

swift
enum CompassPoint {
    case north
    case south
    case east
    case west
}

var cPoint = CompassPoint.north
print(cPoint) //north

1行で複数のケースを定義することもできます。

swift
enum Week {
    case monday, tuesday, wednesday, thursday, friday, saturday, sunday
}
var today = Week.monday
print(today) //monday

//enum型が代入された変数に対しては、別のケースを代入する場合はenum名を省くことができます。
today = .saturday
print(today) //saturday

enum型が入った変数には、そのenum型内で定義されているケースのどれかが入っているため、switch文と一緒に使うことで、Aの場合A+をする、Bの場合B+をするという処理が記述しやすくなります。

swift
enum Week {
    case monday, tuesday, wednesday, thursday, friday, saturday, sunday
}

var today = Week.monday

switch today {
case .monday :
    //here
    print("Today is monday")
case .tuesday :
    print("Today is tuesday")
default:
    print("The day of today is unknown")
}

関連型enum(Associated Values)

Appleの公式ドキュメントでは「Associated Values」と書かれていましたが日本語にするとどうなるのでしょうか。今回は関連型enumと訳しました。

関連型enumでは、定義したケースに関連する値を付けることができます。
株の取引における以下のようなケースを考えてみましょう。

swift
enum Trade {
    case Buy
    case Sell
}
func trade(tradeType: Trade, stock: String, amount: Int) {}

このような記述は間違いではありませんが、trade関数にenumのtradeTypeと一緒に渡すstockとamountは、caseがBuyにしろSellにしろ必ずついてくるもので、それを別々の引数として渡すことは不必要です。こういった場合、関連型enumを使うとスッキリと記述することができます。

swift
enum Trade {
    case Buy(stock: String, amount: Int)
    case Sell(stock: String, amount: Int)
}
func trade(type: Trade) {}

var action = Trade.Buy(stock: "Apple", amount: 100)

参考サイト

enumに定義されるケースがクラスにおけるプロパティーを持つことができる、というようなイメージでしょか。

値型enum(Raw Values)

値型enumの仕様は以下になる。
・デファルト値(raw value)の代入ができる
・全ての値は同じ型でなければならない
・型は文字列型、キャラ型、整数、浮動小数点型でなければならない
・全ての値はユニークでなければならない

enum Week : Int {
    case monday = 1
    case tuesday = 2
    case wednesday = 3
    //以下は型が違うのでコンパイルエラー
    //case thursday = "4"
    //以下はユニークにならないのでコンパイルエラー
    //case thursday = 3
}

//raw valueは以下のように.rawValueで取得できる。
var tomorrow = Week.monday.rawValue
6
8
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
8