LoginSignup
0
1

More than 1 year has passed since last update.

スイフト勉強_ データタイプ 深化 (列挙型)

Posted at

この前,スイフトのコレクション型について調べた
今日は最後に列挙形について調べたい。

列挙型(enum)

列挙型は、関連する項目図をまとめて表現することができるタイプである。 他の値とは異なって定義された項目の値以外は追加及び修正ができない特徴がある。 したがって、制限された選択肢を与えたいか、定められた値以外はもらいたくないとき、予想された値が限られているときに使いやすい。

スイフトの列挙型は、各列挙型が固有のタイプと認められるため、誤って不具合が発生するのを防ぐことができる。

1.基本列挙型

列挙型はenum というキーワードで宣言が可能である。

enum School {
case primary
case elementary
case middle
case high
}

enum School {
case primary, elementary, middle, high
}

var a : School = .high
var b = School.middle

a = .elementary

Schoolという列挙型には、primary、elementary、middle、highという項目が存在する。 各項目は固有値であり、一行にすべて表現することもできる。

2.ウォン相場

各項目がそれ自体で値を持つが、ソース値を設定できる。

enum School: String{
case primary = "a"
case elementary = "b"
case middle = "c"
case high = "d"
}

var a : School = .high
print(a.rawValue) // d

一部だけ元値を支払うこともできる。

その場合、文字列は項目名の通りを原始値として持つことになり、整数の場合には最初の項目を基準に0から1ずつ増えていく値を持つことになる。

enum School: String{
case primary = "a"
case elementary = "b"
case middle
case high = "d"
}

var a : School = .high
print(a.rawValue) // d
var b : School = .middle
print(b.rawValue) // middle

enum num: Int {
case zero
case one
case ten = 10
}
print(num.zero.rawValue) //0

let c = School(rawValue:a) //primary
let d = School(rawValue: f) //nil

列挙型の原始値を介して列挙型の変数又は定数を生成することができる。

正しくない値を使って生成しようとするとnilを返すことになる。

3.関連値

スイフトの列挙型各項目が連関値を持つことになれば、既存プログラミング言語の公用体形態を浮かべることもできる。

項目が自分に関連した値を持たせることができるからだ。 各項目の横に小括弧でまとめて表現できるため、他の項目が連関値を持つからといって全ての項目が連関値を持つ必要はない。

enum Topping {
case cheese, bacon, pepperoni
}
enum Dough {
case original, thin
}

enum Main {
case pasta(taste:String)
case pizza(dough:Dough, topping:Topping)
case chiken(saurce: Bool)
case rice
}

var dinner = Main.pasta(taste: "クリーム")
dinner = Main.pizza(dough: Dough.thin, topping: Topping.bacon)
dinner = Main.chiken(saurce: true)
dinner = Main.rice

4.項目巡回

列挙型のすべてのケースを確認したいとき、列挙型にCaseIterable プロトコルを相続すればよい。

そうすると、その後、列挙型にallcasesという名前のタイププロパティを通じて全てのケイトのコレクションを生成してくれる。

enum School: String, CaseIterable {
case priamry = "a"
case elementary = "b"
case middle = "c"
case high = "d"
}

let all = Shool.allCases
print(all) //[School.primary, School.elementary, School.middle, School.high]

これについては、後でさらに深く調べる必要があるようだ。

5) 循環列挙型

掲げる項目の連関値が、列挙型自身の値でありたいときに使用する。

これは後でまた調べることにする。 難しい···。

0
1
0

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
0
1