\
2014年08月21日
Posted by 屋台ブルー at 2014年08月21日00:00 Comment(0)

Swiftで遊ぼう! - 42 Enumerationもう一度深く考える

swift_logo「Enumerations」という型が、Swift言語にはあって、私には初耳で理解しにくく1回読んだだけで覚えられなかった。完全にArray型(配列)と混同してしまっていた。全く異なる次元の話なのに... 日本語訳が「列挙型」なんでArray(配列)と重なってしまった。もう一度、ちゃんと読み直す。シンタックスは「enum」と記述するので、「イーナム」と読むようだ。日本語表記は「列挙型」だけど、Arrayの日本語表記「配列型」と似ていて間違えるから「イーナム型」と「アレー型」という表記にしていく(将来変更するかもしれません)。異論があればコメントくだささい。

さて、イーナム型のデータを作るとき、必ずメンバーを作らなければならない。このメンバーに型宣言はいらない。実はこのメンバーは値じゃないけど、イーナムのメンバー値(member value)という説明がされているから混乱しそうになる。このメンバー値を宣言したところで、イーナム型の空箱にラベル用意するようなものかな?

enum Goods {
case Grape, Orange, Strawberry, Juice, Rice
}

どちらかと言えば、メンバー値は商品につけるラベルのような扱いなんだろうか、メンバー値を単独で取り回すことができないけど、イーナム型のインスタンスを生成した時にどのラベルにするのか決定ができる。

var whichGoods = Goods.Grape

こうしてやると、whichGoodsにGrapeのラベル付きの箱ができたような感じなんだろう。それをJuceのラベルに変えるのは以下のようにする。

whichGoods = .Juice

ラベルなので値ではなく、単なる識別名だよね。これがメンバー値のイメージだろうか? 頭が硬いのでなかなか納得できない。

そして、このメンバー値にAssociated Value(関連値)を割りふることができる。というか、このAssociated Value(関連値)がイーナム型変数を使うにしても、この関連値が無いと意味ある使い方はできないように思える。

この関連値、どんな型の値でも保持させることができる。

enum Barcode {
case UPCA(Int, Int, Int, Int)
case QRCode(String)
}

例文に載っているのが上記のイーナム型Barcodeであるが、ラベルとしてのメンバー値が2つあり、それぞれ関連値として異なる「型」が指定されている。UPCAはInt型の値を4つとるか、QRCodeのString型の値をとるか選ぶことができる。

しかし、このイーナム型の関連値、利用するのにswitch(スイッチ)文しかないような。でも、イーナム型のデータ、確かメンバー値に関数も取れたような。この関連値は関数で利用することもできるんでしょうか?

var productBarcode = Barcode.UPCA(8, 79347210, 4839218, 9)


switch productBarcode {
case .UPCA(let numberSystem, let manufacturer, let product, let check):
println("UPC-A: \(numberSystem), \(manufacturer), \(product), \(check).")
case .QRCode(let productCode):
println("QR code: \(productCode).")
}

イーナム型の関連値はインスタンスを生成してスイッチで指定す流必要があるが、この関連値を外から利用する方法は無いんじゃないかな。実はイーナム型データを実際のプログラムで利用するために次のRaw Value(ローバリュー)の組み合わせが必須なんでしょう。

enum Planet: Int {
case Merrcury = 1, Venus, Earth, Mars, Jupiter, Saturn, Uranus, Neptune
}

let earthsOrder = Planet.Earth.toRaw()

ここで重要なメソッドが、「toRaw()」と「fromRaw()」

イーナムの応用例は次の話題にする。イーナム、なんかピントきませんね。


同じカテゴリー(Swiftで遊ぼう!)の記事画像
Swiftで遊ぼう! - プログラミングまとめ(ときどき更新)
Swiftで遊ぼう! - 番外編 - Xcode6:ショートカットと用語説明
Swiftで遊ぼう! - 209 - ルートビューのコードは続く:CGRect
Swiftで遊ぼう! - 208 - ルートビューのコード
Swiftで遊ぼう! - 207 - ツールバーボタンとビューコントローラーを繋ぐ
Swiftで遊ぼう! - 206 - ビューコントローラーにビューコントローラーを載せる
同じカテゴリー(Swiftで遊ぼう!)の記事
 Swiftで遊ぼう! - プログラミングまとめ(ときどき更新) (2021-01-31 00:00)
 Swiftで遊ぼう! - 番外編 - Xcode6:ショートカットと用語説明 (2015-04-05 00:00)
 Swiftで遊ぼう! - 209 - ルートビューのコードは続く:CGRect (2015-02-06 00:00)
 Swiftで遊ぼう! - 208 - ルートビューのコード (2015-02-05 00:00)
 Swiftで遊ぼう! - 207 - ツールバーボタンとビューコントローラーを繋ぐ (2015-02-04 00:00)
 Swiftで遊ぼう! - 206 - ビューコントローラーにビューコントローラーを載せる (2015-02-03 00:00)

上の画像に書かれている文字を入力して下さい
 
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。

削除
Swiftで遊ぼう! - 42 Enumerationもう一度深く考える
    コメント(0)