スウィフト – 列挙

スポンサーリンク

プログラマになるのに遅いということはない!
天職を本気で考えている方向けのプログラミングスクールです。 転職を保証しているため、未経験からIT業界へ転職を求めている方へおすすめです! 学習終了から3ヶ月で転職できなかったら 全額返金制度あり!

----------------------------------------------------------------------------------------


スウィフト – 列挙


列挙型は、関連する一連の値で構成されるデータ型です。


Swift 4の列挙もCとObjective Cの構造によく似ています

  • クラスで宣言され、その値はそのクラスのインスタンスを通じてアクセスされます。
  • 初期のメンバーの値は列挙型イニシャライザを使用して定義されます。
  • 標準的なプロトコル機能を確保することにより、その機能も拡張されています。

構文


列挙型はenumキーワードで作られ、定義全体を1組の中括弧に入れます。

enum enumname {
   // 列挙型はここで説明されます
}

たとえば、次のように曜日の列挙を定義できます。

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に割り当てられます。日曜日に属するデータ型が、その特定のクラスの後続の列挙型メンバに割り当てられることをコンパイラに通知します。enumメンバのデータ型が定義されると、値とそれ以上の計算を渡すことでメンバにアクセスできます。

Switchステートメントを使用した場合


指定された条件に基づいて特定の条件にアクセスされる変数は1つだけです。

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を列挙名として定義します。その後、 ‘インド’、 ‘アメリカ’、 ‘アフリカ’、 ‘オーストラリア’などのメンバーはクラス ‘気候 climate’に属すると宣言されます。

メンバーのアメリカは(season)変数に割り当てられます。さらに、スイッチケースには.Americaに対応する値が表示され、その特定のステートメントに分岐します。

出力は「Climate is Cold”」と表示されます。同様に、すべてのメンバーにswitchステートメントを介してアクセスできます。条件が満たされない場合、デフォルトで「気候は予測不可能」と表示されます。

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

関連付けられた値を持つ列挙型


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つの科目で生徒の名前とマークにアクセスする列挙名は生徒として宣言され、列挙クラスに存在するメンバーは文字列データ型に属する名前で、マークは整数データ型のmark1、mark2、およびmark3として表されます。学生の名前または得点したマークにアクセスするには

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

今度は、ケースケースが実行された場合、スイッチケースは学生名を印刷し、それ以外の場合は学生が保護しているマークを印刷します。両方の条件が失敗すると、デフォルトブロックが実行されます。

RAWを持つ列挙型


RAWは、文字列、文字、または整数型または浮動小数点型のいずれかです。各生の値は、列挙宣言内で一意でなければなりません。整数が生の値に使用されるとき、列挙メンバのいくつかに値が指定されていない場合、整数が自動増分されます。

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.

前のページ 次のページ









スポンサーリンク

プログラミングは独学からは挫折の可能性が高いです。まずは無料体験ができる
コードキャンプが本当におすすめ。無料体験でわからないところを聞きましょう。
転職補助つき。カリキュラム終了後に転職紹介をしてくれます。