Swift-enumerations

提供:Dev Guides
移動先:案内検索

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.