Swift-列挙

列挙型は、関連する値のセットで構成されるユーザー定義のデータ型です。キーワードenum 列挙型データ型を定義するために使用されます。

列挙機能

Swift 4の列挙型も、CおよびObjectiveCの構造に似ています。

  • これはクラスで宣言され、その値はそのクラスのインスタンスを介してアクセスされます。

  • 初期メンバー値は、列挙型初期化子を使用して定義されます。

  • その機能は、標準のプロトコル機能を保証することによっても拡張されます。

構文

列挙型はenumキーワードで導入され、定義全体を中括弧のペア内に配置します-

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のようなデフォルト値をメンバーに割り当てません。代わりに、メンバーは列挙名によって明示的に定義されます。列挙名は大文字で始める必要があります(例:列挙型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

プログラムは最初にClimateを列挙名として定義します。次に、「インド」、「アメリカ」、「アフリカ」、「オーストラリア」などのメンバーは、クラス「気候」に属すると宣言されます。これで、メンバーのアメリカがシーズン変数に割り当てられます。さらに、Switch caseは、.Americaに対応する値を確認し、その特定のステートメントに分岐します。出力は「気候は寒い」と表示されます。同様に、すべてのメンバーはswitchステートメントを介してアクセスできます。条件が満たされない場合、デフォルトで「気候は予測できません」と出力されます。

列挙は、関連する値と生の値にさらに分類できます。

関連する値と生の値の違い

関連する値 生の値
さまざまなデータ型 同じデータ型
例:列挙型{10,0.8、 "こんにちは"} 例:列挙型{10,35,50}
値は定数または変数に基づいて作成されます 事前入力された値
毎回宣言されると異なります メンバーの値は同じです

関連する値を持つ列挙型

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つのサブジェクトで保護された学生の名前とマークにアクセスすると、列挙名は学生として宣言され、列挙クラスに存在するメンバーは文字列データ型に属する名前であり、マークはデータ型Integerのmark1、mark2、mark3として表されます。生徒の名前またはスコアを付けたマークにアクセスするには

var studDetails = Student.Name("Swift")
var studMarks = Student.Mark(98,97,95)

これで、switch 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.