SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

アップルの新プログラミング言語「Swift」を探検しよう

メソッドも呼び出せる! Swiftの強力な「列挙型」

アップルの新プログラミング言語「Swift」を探検しよう 第3回


メンバー付随型

 列挙型の各メンバーに付随させたい値の型を指定することで、メンバーに付随した具体的な値を入れることができます。

enum CustomResult {
    case Success(Int, String)
    case Error(String)
}

 上記の宣言では、Successに伴う具体的な値として(Int, String)型のタプル値を、Errorに伴う具体的な値としてString型の値を、メンバーとともに指定できます。

var result = CustomResult.Success(3, "wow")
result = .Error("failed")

 メンバーに付随型がある場合には、switch文でletを使うことにより、付随値を取り出すことができます。

var result = CustomResult.Success(10, "hour")
switch result {
case .Success(let number, let message):
    println("number : \(number), message : \(message)")
case .Error(let message):
    println("error : \(message)")
}
// "number : 10, message : hour"

 メンバーの付随値に1つ1つletを指定する必要はありません。次のように、メンバーに対してletを指定することも可能です。

var result = CustomResult.Error("failed")
switch result {
case let .Success(number, message):
    println("number : \(number), message : \(message)")
case let .Error(message):
    println("error : \(message)")
}
// "error : failed"

 

生の値としての列挙型

 Objective-CにおけるNS_ENUMと同じように、具体的なInt型などが入った列挙型も宣言できます。

enum Fruits : Int {
    case Orange = 1, Banana, Apple
}

 Swiftの列挙型には、メンバーから具体的な値を取り出すためにtoRaw()メソッドが、具体的な値からメンバーに変換するためにfromRow()メソッドが、それぞれ用意されています。

var orange = Fruits.Orange
var orangeNum = orange.toRaw() // 1
var banana = Fruits.fromRaw(2) // Fruits.Banana

 なお、上記の例にあるfromRaw()メソッドは、後で解説するオプショナル列挙型にFruitsをくるんで返します。Int型を指定してメンバーを取得できない場合があるためです。

列挙型のメソッド

 Swiftの列挙型には、メソッドを定義することも可能です。メンバーごとに異なる振る舞いを定義したい場合に便利です。

enum CustomResult {
    case Success(Int, String)
    case Error(String)
    
    func printMessage() {
        switch self {
        case let .Success(num, message):
            println(message)
        case let .Error(message):
            println(message)
        }
    }
}

var result = CustomResult.Success(1, "sleeping")
result.printMessage() // sleeping

次のページ
オプショナル列挙型

この記事は参考になりましたか?

アップルの新プログラミング言語「Swift」を探検しよう連載記事一覧

もっと読む

この記事の著者

yad(ヤド)

クラスメソッド株式会社のアプリケーションエンジニア。iPhoneアプリケーションの開発に2年以上従事している。開発に使用するObjective-Cのみならず、関数型言語Haskellや機械学習などにも関心がある。「Developers.IO」に寄稿した記事の一覧

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/7886 2014/11/25 16:08

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー