Swift-enumerations
Swift-列挙
列挙は、関連する値のセットで構成されるユーザー定義のデータ型です。 キーワード enum は、列挙データ型を定義するために使用されます。
列挙機能
Swift 4の列挙も、CおよびObjective Cの構造に似ています。
- クラスで宣言され、その値はそのクラスのインスタンスを通じてアクセスされます。
- 初期メンバー値は、列挙型の初期化子を使用して定義されます。
- 標準のプロトコル機能を確保することにより、その機能も拡張されています。
構文
列挙型は列挙型キーワードで導入され、その定義全体を中括弧のペア内に配置します-
enum enumname {
//enumeration values are described here
}
たとえば、次のように曜日の列挙を定義することができます-
enum DaysofaWeek {
case Sunday
case Monday
---
case Saturday
}
例
enum names {
case Swift
case Closures
}
var lang = names.Closures
lang = .Closures
switch lang {
case .Swift:
print("Welcome to Swift")
case .Closures:
print("Welcome to Closures")
default:
print("Introduction")
}
プレイグラウンドを使用して上記のプログラムを実行すると、次の結果が得られます-
Welcome to Closures
Swift 4列挙は、CやObjective Cのようなデフォルト値をメンバーに割り当てません。 代わりに、メンバーは列挙名によって明示的に定義されます。 列挙名は大文字で始める必要があります(例:enum DaysofaWeek)。
var weekDay = DaysofaWeek.Sunday
ここでは、列挙名「DaysofaWeek」が変数weekday.Sundayに割り当てられています。 データ型が日曜日に属することは、その特定のクラスの後続の列挙型メンバーに割り当てられることをコンパイラーに通知します。 列挙メンバーデータ型が定義されると、値と追加の計算を渡すことでメンバーにアクセスできます。
Switchステートメントを使用した列挙
Swift 4の「Switch」ステートメントも、マルチウェイ選択に従います。 指定された条件に基づいて特定の時間にアクセスされる変数は1つだけです。 switchステートメントのデフォルトケースは、未指定のケースをトラップするために使用されます。
enum Climate {
case India
case America
case Africa
case Australia
}
var season = Climate.America
season = .America
switch season {
case .India:
print("Climate is Hot")
case .America:
print("Climate is Cold")
case .Africa:
print("Climate is Moderate")
case .Australia:
print("Climate is Rainy")
}
プレイグラウンドを使用して上記のプログラムを実行すると、次の結果が得られます-
Climate is Cold
プログラムは最初に気候を列挙名として定義します。 その後、「インド」、「アメリカ」、「アフリカ」、「オーストラリア」などのメンバーは、クラス「気候」に属すると宣言されます。 これで、メンバーAmericaがシーズン変数に割り当てられました。 さらに、Switch caseは.Americaに対応する値を確認し、その特定のステートメントに分岐します。 出力は「気候は寒い」と表示されます。 同様に、すべてのメンバーはswitchステートメントを介してアクセスできます。 条件が満たされない場合、デフォルトで「気候は予測不可能です」と印刷されます。
列挙は、関連する値と生の値にさらに分類できます。
関連する値と生の値の違い
Associated Values | Raw Values |
Different Datatypes | Same Datatypes |
Ex: enum \{10,0.8,"Hello"} | Ex: enum \{10,35,50} |
Values are created based on constant or variable | Prepopulated Values |
Varies when declared each time | Value for member is same |
関連する値を持つ列挙
enum Student {
case Name(String)
case Mark(Int,Int,Int)
}
var studDetails = Student.Name("Swift 4")
var studMarks = Student.Mark(98,97,95)
switch studMarks {
case .Name(let studName):
print("Student name is: \(studName).")
case .Mark(let Mark1, let Mark2, let Mark3):
print("Student Marks are: \(Mark1),\(Mark2),\(Mark3).")
}
プレイグラウンドを使用して上記のプログラムを実行すると、次の結果が得られます-
Student Marks are: 98,97,95.
たとえば、3つのサブジェクトで保護されている学生の名前とマークにアクセスするとします。列挙名はstudentとして宣言され、enumクラスに存在するメンバーは文字列データ型に属する名前です。 学生の名前または採点したマークにアクセスするには
var studDetails = Student.Name("Swift")
var studMarks = Student.Mark(98,97,95)
現在、switch caseは、そのcaseブロックが実行された場合、学生名を印刷します。そうでない場合、学生によって保護されたマークを印刷します。 両方の条件が満たされない場合、デフォルトのブロックが実行されます。
生の値を持つ列挙
生の値は、文字列、文字、または整数型または浮動小数点型のいずれかです。 各生の値は、列挙宣言内で一意である必要があります。 生の値に整数が使用されている場合、一部の列挙メンバーに値が指定されていない場合、整数は自動的に増加します。
enum Month: Int {
case January = 1, February, March, April, May, June, July, August,
September, October, November, December
}
let yearMonth = Month.May.rawValue
print("Value of the Month is: \(yearMonth).")
プレイグラウンドを使用して上記のプログラムを実行すると、次の結果が得られます-
Value of the Month is: 5.