深入解析Swift編程中枚舉類型的相關(guān)使用
枚舉是由用戶定義的數(shù)據(jù)類型的一組相關(guān)值。關(guān)鍵字 enum 用來定義枚舉數(shù)據(jù)類型。
枚舉功能
枚舉在 swift 也類似于 C 和 Objective C 中結(jié)構(gòu)類型
- 它是在一個類中聲明,其值是通過該類的實例來訪問
- 初始成員值是用枚舉初始化定義的
- 其功能也擴展確保標準的協(xié)議功能
語法
枚舉引入 enum 關(guān)鍵字和一對大括號內(nèi)將它們定義:
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:
println("Welcome to Swift")
case .Closures:
println("Welcome to Closures")
default:
println("Introduction")
}
當我們上面的程序使用 playground 運行,我們得到以下結(jié)果
Welcome to Closures
Swift 中的枚舉不象 C 和 Objective C 分配其成員的默認值,相反,成員由它們枚舉名稱明確定義。枚舉名稱應(yīng)該使用大寫字母(例如:enum DaysofaWeek)。
var weekDay = DaysofaWeek.Sunday
這里所述枚舉名'DaysofaWeek'被分配給一個變量 weekday.Sunday。它通知編譯器數(shù)據(jù)類型屬于周日將被分配給該特定類的后續(xù)枚舉成員。一旦枚舉成員的數(shù)據(jù)類型定義,其成員可以通過傳遞值,并進一步計算進行訪問。
枚舉與Switch語句
Swift 中的 'Switch' 語句也遵循了多路選擇。 只有一個變量被以基于指定的條件的特定時間訪問。默認情況下,在switch語句用于捕獲不確定的情況(case)。
enum Climate{
case India
case America
case Africa
case Australia
}
var season = Climate.America
season = .America
switch season
{
case .India:
println("Climate is Hot")
case .America:
println("Climate is Cold")
case .Africa:
println("Climate is Moderate")
case .Australia:
println("Climate is Rainy")
default:
println("Climate is not predictable")
}
當我們上面的程序使用 playground 運行,我們得到以下結(jié)果
Climte is Cold
該程序首先定義了Climate 作為枚舉名稱。那么它的成員如, 'China', 'America', 'Africa' 和 'Australia' 聲明屬于類 'Climate'. 現(xiàn)在成員 America 被分配到一個 Season 變量。此外,Switch case可以找到對應(yīng) .America 的值,并跳轉(zhuǎn)到該特定語句。 輸出將顯示為 “Climate is Cold”。同樣,所有成員可以通過 switch 語句訪問。 當條件不滿足它打印默認內(nèi)容 'Climate is not predictable'
枚舉可進一步劃分到相關(guān)的值和原始值。
關(guān)聯(lián)值和原始值之間的差異
枚舉與關(guān)聯(lián)值
enum Student{
case Name(String)
case Mark(Int,Int,Int)
}
var studDetails = Student.Name("Swift")
var studMarks = Student.Mark(98,97,95)
switch studMarks {
case .Name(let studName):
println("Student name is: \(studName).")
case .Mark(let Mark1, let Mark2, let Mark3):
println("Student Marks are: \(Mark1),\(Mark2),\(Mark3).")
default:
println("Nothing")
}
當我們上面的程序使用 playground 運行,我們得到以下結(jié)果
Swift 98 97 95
例如,考慮訪問學(xué)生的名字和標記固定在三個科目枚舉名稱被聲明為 student ,而在枚舉類中的成員名稱都屬于字符串數(shù)據(jù)類型,標記表示為 mark1, mark2 和 mark3 數(shù)據(jù)類型為整數(shù)。若要訪問的是學(xué)生的名字或標記分數(shù):
var studDetails = Student.Name("Swift")
var studMarks = Student.Mark(98,97,95)
現(xiàn)在,如果塊初執(zhí)行,switch case 將打印學(xué)生姓名,否則它將打印學(xué)生固定的標記。 如果這兩個條件都失敗了,將執(zhí)行默認塊。
枚舉與原始值
原始值可以是字符串,字符,或任何整數(shù)或浮點數(shù)類型。每個原始值必須在其枚舉聲明中是唯一的。當整數(shù)用于原始值,如果指定的一些枚舉成員沒有任何值,它們會自動遞增。
enum Month: Int {
case January = 1, February, March, April, May, June, July, August, September, October, November, December
}
let yearMonth = Month.May.rawValue
println("Value of the Month is: \(yearMonth).")
當我們上面的程序使用 playground 運行,我們得到以下結(jié)果:
Value of the Month is: 5.
相關(guān)文章
Swift HTTP加載請求Loading Requests教程
這篇文章主要為大家介紹了Swift HTTP加載請求Loading Requests教程示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-02-02深入理解Swift中單例模式的替換及Swift 3.0單例模式的實現(xiàn)
這篇文章主要給大家介紹了關(guān)于Swift中單例模式替換的相關(guān)資料,然后又跟大家分享了關(guān)于Swift3.0 單例模式實現(xiàn)的幾種方法-Dispatch_Once的內(nèi)容,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面來一起看看吧。2017-11-11Ubuntu 16.04上安裝 Swift 3.0及問題解答
本文給大家分享的是在Ubuntu系統(tǒng)中安裝 Swift 3.0的方法和步驟,以及安裝過程中有可能遇到的問題的解答,這里推薦給小伙伴們,希望大家能夠喜歡2016-07-07Swift 3.0基礎(chǔ)學(xué)習(xí)之閉包
Swift引進了閉包的概念,這個與object-c的block類似,使用過block的話都知道有多方便,所以開始學(xué)Swift,先要把閉包學(xué)會,后面使用會很頻繁。下面這篇文章主要介紹了Swift 3.0基礎(chǔ)學(xué)習(xí)之閉包的相關(guān)資料,需要的朋友可以參考借鑒,下面來一起看看吧。2017-03-03Swift的開發(fā)環(huán)境搭建以及基本語法詳解
這篇文章主要介紹了Swift的開發(fā)環(huán)境搭建以及基本語法詳解,是Swift入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下2015-11-11Swift中defer關(guān)鍵字推遲執(zhí)行示例詳解
這篇文章主要給大家介紹了關(guān)于Swift中defer關(guān)鍵字推遲執(zhí)行的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2018-03-03