Swift枚舉

枚舉是用戶定義的數據類型,由一組相關值組成。 關鍵字enum用於定義枚舉數據類型。

枚舉功能

Swift 4中的枚舉也類似於C語言和Objective C的結構。

  • 它在類中聲明,並且通過該類的實例訪問其值。
  • 使用枚舉初始化器定義初始成員值。
  • 通過確保標準協議功能,還可以擴展其功能。

語法
使用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")
}

當使用playground運行上述程式時,得到以下結果 -

Welcome to Closures

Swift 4枚舉不會像C語言和Objective C那樣為其成員分配默認值。它的成員由枚舉名稱顯式定義。 枚舉名稱應以大寫字母開頭(例如:enum DaysofaWeek)。

var weekDay = DaysofaWeek.Sunday

這裏枚舉名稱DaysofaWeek分配給變數weekday.Sunday。 它通知編譯器數據類型屬於Sunday將被分配給該特定類的後續枚舉成員。 當定義了枚舉成員數據類型,就可以通過傳遞值和進一步計算來訪問成員。

使用Switch語句進行枚舉

Swift 4的’switch’語句也遵循多路選擇。 根據指定的條件,在特定時間僅訪問一個變數。 switch語句中的默認情況用於捕獲未指定的情況。示例代碼 -

enum Climate {
   case India
   case America
   case Africa
   case Australia
}

var season = Climate.America
season = .America
switch season {
   case .China:
      print("Climate is Hot")
   case .America:
      print("Climate is Cold")
   case .Africa:
      print("Climate is Moderate")
   case .Australia:
      print("Climate is Rainy")

}

當使用playground運行上述程式時,得到以下結果 -

Climate is Cold

上面程式首先將Climate定義為枚舉名稱。 然後,它的成員如:ChinaAmericaAfricaAustralia,聲明屬於Climate類。 現在,America成員被分配到season變數。 此外,Switch case將比較.America相對應的值,它將分支到該特定語句。 輸出將顯示為Climate is Cold。 同樣,可以通過switch語句訪問所有成員。 當條件不滿足時,默認列印Climate is not predictable

枚舉可以進一步分類為關聯值和原始值。

關聯值與原始值的區別

關聯值 原始值
不同的數據類型 相同的數據類型
例如:enum {10,0.8,"Hello"} 例如:enum {1, 20, 99, 1999}
值基於常量或變數創建 預先填充的值
每次聲明時都會變化 成員值相同

具有相關值的枚舉

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).")
}

當使用playground運行上述程式時,得到以下結果 -

Student Marks are: 98,97,95.

例如,考慮訪問三個科目的學生姓名和分數,枚舉名稱聲明為Student,枚舉類中的成員Name是屬於字串數據類型,Mark表示為整數類型的:mark1mark2mark3。 訪問學生姓名或分數代碼如下 -

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).")

當使用playground運行上述程式時,得到以下結果 -

Value of the Month is: 5.

上一篇: Swift Closures(閉包) 下一篇: Swift結構體