- Swift 教程
- Swift - 首頁
- Swift - 概述
- Swift - 環境
- Swift - 基本語法
- Swift - 變數
- Swift - 常量
- Swift - 字面量
- Swift - 註釋
- Swift 運算子
- Swift - 運算子
- Swift - 算術運算子
- Swift - 比較運算子
- Swift - 邏輯運算子
- Swift - 賦值運算子
- Swift - 位運算子
- Swift - 其他運算子
- Swift 高階運算子
- Swift - 運算子過載
- Swift - 算術溢位運算子
- Swift - 恆等運算子
- Swift - 範圍運算子
- Swift 資料型別
- Swift - 資料型別
- Swift - 整數
- Swift - 浮點數
- Swift - Double
- Swift - 布林值
- Swift - 字串
- Swift - 字元
- Swift - 類型別名
- Swift - 可選型別
- Swift - 元組
- Swift - 斷言和前提條件
- Swift 控制流
- Swift - 決策制定
- Swift - if 語句
- Swift - if...else if...else 語句
- Swift - if-else 語句
- Swift - 巢狀 if 語句
- Swift - switch 語句
- Swift - 迴圈
- Swift - for in 迴圈
- Swift - while 迴圈
- Swift - repeat...while 迴圈
- Swift - continue 語句
- Swift - break 語句
- Swift - fall through 語句
- Swift 集合
- Swift - 陣列
- Swift - 集合
- Swift - 字典
- Swift 函式
- Swift - 函式
- Swift - 巢狀函式
- Swift - 函式過載
- Swift - 遞迴
- Swift - 高階函式
- Swift 閉包
- Swift - 閉包
- Swift - 轉義和非轉義閉包
- Swift - 自動閉包
- Swift 面向物件程式設計
- Swift - 列舉
- Swift - 結構體
- Swift - 類
- Swift - 屬性
- Swift - 方法
- Swift - 下標
- Swift - 繼承
- Swift - 重寫
- Swift - 初始化
- Swift - 析構
- Swift 高階
- Swift - ARC 概述
- Swift - 可選鏈
- Swift - 錯誤處理
- Swift - 併發
- Swift - 型別轉換
- Swift - 巢狀型別
- Swift - 擴充套件
- Swift - 協議
- Swift - 泛型
- Swift - 訪問控制
- Swift - 函式與方法
- Swift - SwiftyJSON
- Swift - 單例類
- Swift 隨機數
- Swift 不透明型別和裝箱型別
- Swift 有用資源
- Swift - 線上編譯
- Swift - 快速指南
- Swift - 有用資源
- Swift - 討論
Swift - 列舉
列舉是一種使用者定義的資料型別,它由一組相關的值組成,並提供了一種以型別安全的方式處理這些值的方法。列舉通常不為每個情況提供值,但如果需要,可以為每個列舉情況分配值,並且該值可以是任何型別,例如字串、整數、浮點數或字元。
Swift 中的列舉
我們可以使用enum關鍵字後跟名稱和花括號來定義列舉,其中花括號包含使用case關鍵字的列舉情況。列舉名稱應以大寫字母開頭(例如:enum DaysofaWeek)。
語法
以下是列舉的語法:
enum EnumName {
// enumeration cases
case value1
case value2
...
case valueN
}
我們還可以將多個列舉情況定義在一行中,其中每個情況用逗號分隔。
enum EnumName {
// enumeration cases
case value1, value2, value3,…,valueN
}
示例
以下是 Swift 的示例,演示如何建立列舉:
enum CarColor {
// enum values
case Blue
case Green
case White
case Off-white
}
在 Swift 中建立列舉變數
在列舉中,我們可以直接建立一個列舉型別變數併為其分配一個情況。我們可以使用點(.)表示法將情況分配給列舉變數,其中點表示法後跟值(例如:.value)。
語法
以下是建立列舉變數的語法:
var variableName : EnumName
以下是為列舉變數賦值的語法:
variableName = .enumValue
示例
Swift 程式用於建立和訪問列舉變數。
// Defining an enumeration with cases representing subjects
enum Subjects {
case Maths
case Science
case Social
case English
case Hindi
case ComputerProgramming
}
// Creating and assigning value to an enum variable
var name: Subjects = .English
// Access the value of the enum variable and display data accordingly
switch name {
case .English, .Hindi, .ComputerProgramming:
print("Elective subjects!")
case .Maths, .Science, .Social:
print("Compulsory subjects")
}
輸出
它將產生以下輸出:
Elective subjects!
示例
Swift 程式用於建立和訪問列舉變數。
// Defining an enumeration with cases representing car colour
enum Subjects {
case Black
case Blue
case MidnightGray
case White
case OffWhite
case Silver
}
// Creating and assigning value to an enum variable
var color: Subjects = .Blue
// Using an if statement to check the enum value
if color == .Blue {
print("Dark edition of car")
}
輸出
它將產生以下輸出:
Dark edition of car
Swift 中帶有原始值的列舉
在列舉中,我們還可以為列舉情況分配值,這些值稱為原始值。原始值可以是字串、字元或任何整數或浮點數型別。每個原始值在其列舉宣告中必須是唯一的,並且型別相同。
語法
以下是為列舉情況分配原始值的語法:
enum enumName : Type{
// enum values
case value1 = RawValue1
case value2 = RawValue2
}
訪問原始值
我們可以藉助名為rawValue的預定義屬性來訪問原始值。rawValue屬性用於檢索與指定列舉情況關聯的原始值。
語法
以下是rawValue屬性的語法:
let variableName = enumName.enumCase.rawValue
示例
Swift 程式用於使用rawValue屬性訪問列舉的原始值。
// Defining an enumeration with cases representing car colour
enum CarColor : Int {
case Black = 2
case Blue = 4
case OffWhite = 5
case Silver = 6
}
// Accessing the raw value
var colorCount = CarColor.Blue.rawValue
// Displaying the raw values
print("Raw Value:", colorCount)
輸出
它將產生以下輸出:
Raw Value: 4
隱式分配原始值
當整數或字串用作列舉情況的原始值時,則無需為每個列舉情況指定值,因為 Swift 將自動為每個列舉情況分配值。此類方法稱為隱式分配原始值。
當我們使用 Integer 型別作為列舉情況的原始值併為第一個情況提供原始值時,Swift 將自動為後續情況分配原始值,其中分配給當前情況的值大於前一個情況的值。
示例
Swift 程式用於隱式分配 Integer 型別的原始值。
// Defining an enumeration with cases representing marks subject
enum SubjectMarks: Int {
// Assigning raw value to the first case
// Now Swift will automatically assign raw values to the cases
// for english = 41, hindi = 42, and physics = 43
case maths = 40, english, hindi, physics
}
// Accessing the raw value
let marks = SubjectMarks.hindi.rawValue
print("Marks of hindi = ", marks)
輸出
它將產生以下輸出:
Marks of hindi = 42
如果我們不為第一個情況分配原始值,則預設情況下,Swift 將為第一個情況分配零,然後為第二個情況分配 1,為第三個情況分配 2,依此類推。
示例
// Defining an enumeration with cases representing marks subject
enum SubjectMarks: Int {
// Here we do not assign raw value to the first case
// So Swift will automatically assign default raw values
case maths // Default raw value = 0
case english // Default raw value = 1
case hindi // Default raw value = 2
case physics // Default raw value = 3
}
// Accessing the raw value
let marks = SubjectMarks.hindi.rawValue
print("Marks of hindi = ", marks)
輸出
它將產生以下輸出:
Marks of hindi = 2
當我們使用 String 型別作為列舉情況的原始值並且不為情況提供原始值時。然後,預設情況下,Swift 將隱式分配情況的名稱作為原始值。
示例
Swift 程式用於隱式分配 String 型別的原始值。
// Defining an enumeration with cases representing subject names
enum Subjects: String{
// Here we do not assign raw value to the cases
// So Swift will automatically assign default raw values
case maths // Default raw value = maths
case english // Default raw value = english
case hindi // Default raw value = hindi
case physics // Default raw value = physics
}
// Accessing the raw value
let marks = Subjects.hindi.rawValue
print("Marks of hindi = ", marks)
輸出
它將產生以下輸出:
Marks of hindi = hindi
從原始值初始化
在定義帶有原始值型別的列舉時,Swift 會自動為該列舉建立一個初始化器,該初始化器將原始值作為引數並返回一個可選值(一個情況或 nil)。如果原始值與任何給定情況匹配,則初始化器將返回包含在可選值中的該情況,而如果原始值與任何給定情況都不匹配,則它將返回 nil。
示例
Swift 程式用於從原始值初始化。
// Defining an enumeration with raw values of string type
enum Fruits: String {
case value1 = "Mango"
case value2 = "Apple"
case value3 = "Banana"
case value4 = "Orange"
}
// Initializing from raw values
if let result = Fruits(rawValue: "Apple") {
print("Case '\(result)' is found for the given raw value")
} else {
print("No is case found")
}
輸出
它將產生以下輸出:
Case 'value2' is found for the given raw value
Swift 中帶有關聯值的列舉
帶有關聯值的列舉是 Swift 提供的最重要的功能。它允許我們在列舉的每個情況中新增一些其他資訊。它通常用於型別可以具有不同變體和不同關聯資料的情況。
示例
Swift 程式演示帶有關聯值的列舉。
// Defining an enumeration with associate values
enum Student{
case Name(String)
case Mark(Int, Int, Int)
}
// Creating instances of the enum
var studDetails = Student.Name("Swift")
var studMarks = Student.Mark(98, 97, 95)
// Accessing the associate values
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.
關聯值和原始值之間的區別
| 關聯值 | 原始值 |
|---|---|
| 不同資料型別 | 相同資料型別 |
| 例如:enum {10,0.8,"Hello"} | 例如:enum {10,35,50} |
| 基於常量或變數建立的值 | 預填充值 |
| 每次宣告時都不同 | 成員的值相同 |
Swift 中使用 Switch 語句的列舉
正如我們所知,Switch 語句也遵循多路選擇,這意味著根據指定的條件,一次只能訪問一個變數。因此,我們可以使用 Switch 語句來處理列舉的不同情況。
示例
Swift 程式演示使用 Switch 語句的列舉。
// Defining an enumeration with cases
enum Climate {
case India
case America
case Africa
case Australia
}
// Accessing enumeration cases using a switch statement
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
在 Swift 中迭代列舉
要迭代列舉,我們必須使用“CaseIterable”協議。此協議提供給定列舉的所有情況的集合。然後,我們將在迴圈中使用allCases屬性來迭代每個情況,其中迭代的順序取決於定義情況的順序。如果需要按特定順序排列情況,則相應地定義它們。
示例
Swift 程式用於迭代給定的列舉。
// Defining enumeration with cases
enum Veggies: CaseIterable {
case Onion
case Carrot
case Beetroot
case Tomato
case GreenChilly
}
// Iterating over the given enumeration
for x in Veggies.allCases {
print(x)
}
輸出
它將產生以下輸出:
Onion Carrot Beetroot Tomato GreenChilly
Swift 中的遞迴列舉
在 Swift 中,我們允許建立遞迴列舉。遞迴列舉是一種特殊的列舉,其中情況可以具有列舉型別本身的關聯值。我們必須在遞迴列舉情況之前使用indirect關鍵字,它告訴編譯器新增所有必要的間接層。此外,並非給定列舉中存在的所有情況都需要標記為間接,只有那些涉及遞迴的情況才應標記為間接。
示例
Swift 程式演示遞迴列舉。
// Recursive enumeration for representing arithmetic expressions
enum Calculator {
case number(Int)
// Cases that involve recursion
indirect case sum(Calculator, Calculator)
indirect case product(Calculator, Calculator)
}
// Expressions
let num1 = Calculator.number(10)
let num2 = Calculator.number(12)
let addition = Calculator.sum(num1, num2)
let prod = Calculator.product(num1, addition)
// Function to evaluate an expression
func result(_ exp: Calculator) -> Int {
switch exp {
case let .number(value):
return value
case let .sum(left, right):
return result(left) + result(right)
case let .product(left, right):
return result(left) * result(right)
}
}
// Displaying result
let output = result(addition)
print("Sum is \(output)")
輸出
它將產生以下輸出:
Sum is 22