亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Swift > 正文

Swift教程之枚舉類型詳解

2020-03-09 17:51:12
字體:
供稿:網(wǎng)友
這篇文章主要介紹了Swift教程之枚舉類型詳解,本文講解了枚舉語法、匹配枚舉值與switch語句、關聯(lián)值、原始值等內(nèi)容,需要的朋友可以參考下
 

枚舉定義了一個常用的具有相關性的一組數(shù)據(jù),并在你的代碼中以一個安全的方式使用它們。

如果你熟悉C語言,你就會知道,C語言中的枚舉指定相關名稱為一組整數(shù)值。在Swift中枚舉更為靈活,不必為枚舉的每個成員提供一個值。如果一個值(被稱為“原始”的值)被提供給每個枚舉成員,則該值可以是一個字符串,一個字符,或者任何整數(shù)或浮點類型的值。

另外,枚舉成員可以指定任何類型,每個成員都可以存儲的不同的相關值,就像其他語言中使用集合或變體。你還可以定義一組通用的相關成員為一個枚舉,每一種都有不同的一組與它相關的適當類型的值的一部分。

在Swift中枚舉類型是最重要的類型。它采用了很多以前只有類才具有的特性,如計算性能,以提供有關枚舉的當前值的更多信息,方法和實例方法提供的功能相關的枚舉表示的值傳統(tǒng)上支持的許多功能。枚舉也可以定義初始化,以提供一個初始成員值;可以在原有基礎上擴展擴大它們的功能;并使用協(xié)議來提供標準功能。

欲了解更多有關這些功能,請參見Properties, Methods, Initialization, Extensions, Protocols

1、枚舉語法

使用枚舉enum關鍵詞并把他們的整個定義在一對大括號內(nèi):

 

復制代碼代碼如下:

enum SomeEnumeration {
    // enumeration definition goes here
}

下面是一個指南針的四個點一個例子:

 

 

復制代碼代碼如下:
 
enum CompassPoint {
    case North
    case South
    case East
    case West
}

在枚舉中定義的值(如North,South,East和West)是枚舉的成員值(或成員)。這個例子里case關鍵字表示成員值一條新的分支將被定義。

 

Note

不像C和Objective-C,Swift枚舉成員在創(chuàng)建時不分配默認整數(shù)值。在上面的例子CompassPoints中North,South,Eath,West不等于隱含0,1,2和3,而是一種與CompassPoint明確被定義的類型卻各不相同的值。

多個成員的值可以出現(xiàn)在一行上,用逗號分隔:

 

復制代碼代碼如下:
 
enum Planet {
    case Mercury, Venus, Earth, Mars, Jupiter, Saturn, Uranus, Neptune
}

 

每個枚舉定義中定義了一個全新的類型。像其他Swift的類型,它們的名稱(如CompassPoint和Planet)應為大寫字母。給枚舉類型單數(shù)而不是復數(shù)的名字,這樣理解起來更加容易如:

 

復制代碼代碼如下:

var directionToHead = CompassPoint.West

 

使用directionToHead的類型時,用CompassPoint的一個可能值初始化的推斷。一旦directionToHead被聲明為一個CompassPoint,您可以將其設置為使用更短的.語法而不用再書寫枚舉CompassPoint值本身:

 

復制代碼代碼如下:

directionToHead = .East

 

directionToHead的類型是已知的,所以你可以在設定它的值時,不寫該類型。使用類型明確的枚舉值可以讓代碼具有更好的可讀性。

2、匹配枚舉值與switch語句

你可以使用單個枚舉值匹配switch語句:

 

復制代碼代碼如下:

directionToHead = .South
switch directionToHead {
case .North:
    println("Lots of planets have a north")
case .South:
    println("Watch out for penguins")
case .East:
    println("Where the sun rises")
case .West:
    println("Where the skies are blue")
}
// prints "Watch out for penguins"

你可以理解這段代碼:

 

“考慮directionToHead的價值。當它等于North,打印“Lots of planets have a north”。當它等于South,打印“Watch out for penguins”等等。

正如控制流所描述,Switch語句考慮枚舉的成員,如果省略了West時,這段代碼無法編譯,因為它沒有考慮CompassPoint成員的完整性。Switch語句要求全面性確保枚舉成員,避免不小心漏掉情況發(fā)生。

當它不需要為每一個枚舉成員都匹配的情況下,你可以提供一個默認default分支來涵蓋未明確提到的任何成員:

復制代碼代碼如下:
 
let somePlanet = Planet.Earth
switch somePlanet {
case .Earth:
    println("Mostly harmless")
default:
    println("Not a safe place for humans")
}
// prints "Mostly harmless"

 

3、關聯(lián)值

在上一節(jié)中的示例延時了一個枚舉的成員是如何被定義(分類)的。你可以為Planet.Earth設置一個常量或變量,然后在代碼中檢查這個值。但是,它有時是有用的才能存儲其它類型的關聯(lián)值除了這些成員的值。這讓你隨著成員值存儲額外的自定義信息,并允許在你的代碼中來使用該信息。

Swift的枚舉類型可以由一些數(shù)據(jù)類型相關的組成,如果需要的話,這些數(shù)據(jù)類型可以是各不相同的。枚舉的這種特性跟其它語言中的奇異集合,標簽集合或者變體相似

例如,假設一個庫存跟蹤系統(tǒng)需要由兩種不同類型的條形碼來跟蹤產(chǎn)品。有些產(chǎn)品上標有UPC-A代碼格式,它使用數(shù)字0到9的一維條碼,每一個條碼都有一個“數(shù)字系統(tǒng)”的數(shù)字,后跟十“標識符”的數(shù)字。最后一位是“檢查”位,以驗證代碼已被正確掃描:

Swift教程之枚舉類型詳解

其他產(chǎn)品都貼有二維條碼QR碼格式,它可以使用任何的ISO8859-1字符,并可以編碼字符串,最多2,953個字符:

Swift教程之枚舉類型詳解

這將是方便的庫存跟蹤系統(tǒng)能夠存儲UPC-A條碼作為三個整數(shù)的元組,和QR代碼的條形碼的任何長度的字符串。

在Swift中可以使用一個枚舉來定義兩種類型的產(chǎn)品條形碼,結(jié)構(gòu)可以是這樣的:

 

復制代碼代碼如下:

enum Barcode {
    case UPCA(Int, Int, Int)
    case QRCode(String)
}

 

這可以被理解為:

“定義一個名為條形碼枚舉類型,它可以是UPC-A的任一值類型的關聯(lián)值(Int,Int,Int),或QRCode的一個類型為String的關聯(lián)值。”

這個定義不提供任何實際的Int或String值,它只是定義了條形碼常量和變量當?shù)扔贐arcode.UPCA或Barcode.QRCode關聯(lián)值的類型的時候的存儲形式。

然后可以使用任何一種類型來創(chuàng)建新的條碼:

 

復制代碼代碼如下:
 
var productBarcode = Barcode.UPCA(8, 85909_51226, 3)

 

此示例創(chuàng)建一個名為productBarcode新的變量,并與相關聯(lián)的元組值賦給它Barcode.UPCA的值(8,8590951226,3)。提供的“標識符”值都有整數(shù)加下劃線的文字,85909_51226,使其更易于閱讀的條形碼。

同一產(chǎn)品可以分配不同類型的條形碼:

 

復制代碼代碼如下:
 
productBarcode = .QRCode("ABCDEFGHIJKLMNOP")

 

在這一點上,原來Barcode.UPCA和其整數(shù)值被新的Barcode.QRCode及其字符串值代替。_條形碼的常量和變量可以存儲任何一個_UPCA或QRCode的(連同其關聯(lián)值),但它們只能存儲其中之一在任何指定時間。

不同的條碼類型像以前一樣可以使用一個switch語句來檢查,但是這一次相關的值可以被提取作為switch語句的一部分。您提取每個相關值作為常數(shù)(let前綴)或變量(var前綴)不同的情況下,在switch語句的case代碼內(nèi)使用:

 

復制代碼代碼如下:

switch productBarcode {
case .UPCA(let numberSystem, let identifier, let check):
    println("UPC-A with value of /(numberSystem), /(identifier), /(check).")
case .QRCode(let productCode):
    println("QR code with value of /(productCode).")
}
// prints "QR code with value of ABCDEFGHIJKLMNOP."

如果所有的枚舉成員的關聯(lián)值的提取為常數(shù),或者當所有被提取為變量,為了簡潔起見,可以放置一個var,或let標注在成員名稱前:

 

 

復制代碼代碼如下:

switch productBarcode {
case let .UPCA(numberSystem, identifier, check):
    println("UPC-A with value of /(numberSystem), /(identifier), /(check).")
case let .QRCode(productCode):
    println("QR code with value of /(productCode).")
}
// prints "QR code with value of ABCDEFGHIJKLMNOP."

 

4、原始值

在關聯(lián)值的條形碼的例子演示了一個枚舉的成員如何能聲明它們存儲不同類型的關聯(lián)值。作為替代關聯(lián)值,枚舉成員可以拿出預先填入缺省值(稱為原始值),從而具有相同的類型。

這里是一個存儲原始的ASCII值命名枚舉成員的一個例子:

 

復制代碼代碼如下:
 
enum ASCIIControlCharacter: Character {
    case Tab = "/t"
    case LineFeed = "/n"
    case CarriageReturn = "/r"
}

 

在這里,原始值被定義為字符類型的枚舉叫做ASCIIControlCharacter,并設置了一些比較常見的ASCII控制字符。字符值的字符串和字符的描述。

注意,原始值是不相同關聯(lián)值。原始值設置為預填充的值時,應先在你的代碼中定義枚舉,像上述三個ASCII碼。對于一個特定的枚舉成員的原始值始終是相同的。當你創(chuàng)建一個基于枚舉的常量或變量的新成員的關聯(lián)值設置,每次當你這樣做的時候可以是不同的。

原始值可以是字符串,字符,或任何整數(shù)或浮點數(shù)類型。每個原始值必須在它的枚舉中唯一聲明。當整數(shù)被用于原始值,如果其他??枚舉成員沒有值時,它們自動遞增。

下面列舉的是一個細化的早期Planet枚舉,使用原始整數(shù)值來表示每個Planet的太陽系的順序:

 

復制代碼代碼如下:
 
enum Planet: Int {
    case Mercury = 1, Venus, Earth, Mars, Jupiter, Saturn, Uranus, Neptune
}

自動遞增意味著Planet.Venus具有2的原始值,依此類推。

 

訪問其toRaw方法枚舉成員的原始值:

 

復制代碼代碼如下:
 
let earthsOrder = Planet.Earth.toRaw()
// earthsOrder is 3

使用枚舉的fromRaw方法來試圖找到一個特定的原始值枚舉成員。這個例子識別Uranus的位置通過原始值為7:

 

 

復制代碼代碼如下:
 
let possiblePlanet = Planet.fromRaw(7)
// possiblePlanet is of type Planet? and equals Planet.Uranus

然而,并非所有可能的Int值都會找到一個匹配的星球。正因如此,該fromRaw方法返回一個可選的枚舉成員。在上面的例子中,是possiblePlanet類型Planet?或“可選的Planet”。

 

如果你試圖找到一個Planet為9的位置,通過fromRaw返回可選的Planet值將是無:

 

復制代碼代碼如下:
 
let positionToFind = 9
if let somePlanet = Planet.fromRaw(positionToFind) {
    switch somePlanet {
    case .Earth:
        println("Mostly harmless")
    default:
        println("Not a safe place for humans")
    }
} else {
    println("There isn't a planet at position /(positionToFind)")
}
// prints "There isn't a planet at position 9"

這個范例使用somePlanet= Planet.fromRaw(9)來嘗試訪問可選集合Planet,在可選Planet集合中設置檢索條件somePlanet,在原始值為9的情況下,不能檢索到位置為9的星球,所有else分支被執(zhí)行。


注:相關教程知識閱讀請移步到swift教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
亚洲欧美日韩一二三区| 91网址在线看| 91视频啊啊啊| 久久99伊人| 国产精品嫩草影院在线看| 91亚洲精品丁香在线观看| 91黑人精品一区二区三区| 日韩欧美在线精品| 羞羞视频在线观看一区二区| 97精品人妻一区二区三区香蕉| 日韩一区二区三区在线视频| 夜夜嗨av一区二区三区网站四季av| 欧美羞羞免费网站| 中文字字幕一区二区三区四区五区| 欧美一区二区久久| 亚洲三区在线观看| 精品国产一区二区三区免费| 国产精品极品国产中出| 性xxxxfjsxxxxx欧美| 欧美激情亚洲综合| 伊人免费视频2| 欧美成人禁片在线www| 99国产超薄丝袜足j在线观看| 亚洲人体一区| 日韩精品无码一区二区三区久久久| 中文字幕在线免费观看视频| 中文字幕av高清在线观看| 精品国产精品一区二区夜夜嗨| 亚洲综合中文字幕在线观看| 国产叼嘿视频在线观看| 狠狠精品干练久久久无码中文字幕| 奇米777国产一区国产二区| heyzo高清国产精品| 老司机av福利| 精品视频—区二区三区免费| 在线 丝袜 欧美 日韩 制服| 亚洲欧美日本在线| 国产精品ⅴa在线观看h| 少妇人妻一区二区| 欧美性大战xxxxx久久久| www.神马久久| 狠狠操精品视频| 国产69精品久久久久999小说| 9l视频自拍蝌蚪9l视频成人| 黄色三级网站在线观看| 一级黄色大片儿| 毛片毛片毛片毛片毛| 国产精品久久久久久久泡妞| 免费视频网站在线观看入口| 欧美日韩精品免费观看视频完整| 久久九九精品99国产精品| 国产视频中文字幕在线观看| 精品无人乱码一区二区三区| 欧美与黑人午夜性猛交久久久| 伊人久久中文字幕| 亚洲成av人片在www色猫咪| www.xxxx精品| 国产欧美日韩精品丝袜高跟鞋| 欧美精品一级| 欧美视频福利| 国产精品自拍视频在线| 日本在线免费播放| av成人综合网| 色狠狠一区二区三区| 久久久久久久久综合| 97se亚洲国产综合自在线不卡| 一个人看的www视频免费在线观看| 污视频在线看| 久久亚洲AV成人无码国产野外| 神马影院一区二区| 中文字幕乱码av| 久久资源综合| 精品国偷自产在线| 女人被男人躁得好爽免费视频| 成人淫片免费视频95视频| 久久精品三级视频| 日韩国产欧美在线视频| 日本高清视频在线观看| 日韩一区国产二区欧美三区| 日本韩国一区二区三区视频| 日本免费高清一区二区| 久久久精品在线视频| 美女精品久久久| 亚洲激情一二三区| 亚洲精品自产拍在线观看app| 久久久久久av无码免费网站| 精品精品国产毛片在线看| 免费在线午夜视频| 成人午夜剧场视频网站| 亚洲免费伊人电影| 国产乱码精品1区2区3区| 欧美高清你懂的| 动漫精品一区一码二码三码四码| 亚州精品一二三区| 中文字幕一区免费| 免费久久精品视频| 国产福利不卡视频| 亚洲av永久无码精品| 国产麻豆成人传媒免费观看| 成人免费视频网站入口| 国产一区二区三区探花| 日本成人在线免费观看| a在线观看网站| 日韩欧美99| 国产一区二区中文字幕免费看| 亚洲国产cao| 亚洲国产97在线精品一区| 国产日韩欧美在线播放不卡| 97**国产露脸精品国产| 宅男噜噜噜66国产免费观看| 在线观看免费国产成人软件| 6080亚洲理论片在线观看| 免费观看不卡av| 国模私拍在线观看| 视频一区中文字幕| 成人毛片老司机大片| 国产精品露脸视频| 国产第一页在线观看| 99久久久无码国产精品免费蜜柚| 欧美肉大捧一进一出免费视频| 在线视频一区二区三区在线播放| 成人性生交大片免费观看嘿嘿视频| 午夜亚洲视频| 激情久久久久久久久久久久久久久久| 日本特黄在线观看| 国产日韩欧美亚洲一区| 福利视频一区二区三区| 成人一区二区在线| 中文日韩在线视频| 欧美岛国在线观看| 国产一区二区三区免费看| 亚洲小说欧美激情另类| 成人免费在线视频网站| 欧美男人的天堂一二区| 污网站在线免费| 日韩av电影在线网| 91视频你懂的| 亚洲欧美一级二级三级| av大全在线| 蜜臀久久99精品久久久久宅男| 国产一区2区在线观看| 中文字幕欧美国产| 成人app下载| 欧美挠脚心视频网站| 男人日女人逼逼| 日韩电影在线一区二区三区| 主播大秀视频在线观看一区二区| 久久精品日产第一区二区三区高清版| 成人av综合一区| 久久久久久久久久久福利| 91蝌蚪国产九色| 99pao成人国产永久免费视频| 欧美一进一出视频| 欧美一个色资源| 亚洲激情中文字幕| 国产劲爆久久| 国产欧美丝祙| 美女在线观看视频一区二区| eeuss免费天堂影院| 麻豆mv在线观看| 国产另类xxxxhd高清| 岛国av午夜精品| 欧美精品一区二区三区在线四季| 青青青青久久精品国产一百度| 中文字幕久久精品一区二区| 欧美一区二区免费观在线| 美女精品视频在线| 激情91久久| 亚洲高清久久久久久| 小毛片在线观看| 四虎国产精品成人免费4hu| 午夜激情视频在线观看| 国产呦系列欧美呦日韩呦| 国内外成人免费激情视频| 91高清视频免费观看| 日韩久久精品成人| 成年人视频网站| 国产农村妇女精品一区二区| 免费大秀视频在线播放| 大色综合视频网站在线播放| 中文字幕系列一区| 波多野结衣精品久久| 久久66热这里只有精品| 欧美亚洲国产怡红院影院| 日韩精品欧美国产精品忘忧草| 天天操天天色综合| 国产一区av在线| 久久国产精品 国产精品| 在线观看a网站| 免费av网站在线观看| 神马电影在线观看| 亚洲欧洲日本精品| 日韩欧美999| 中文文精品字幕一区二区| 久久精品国产麻豆| 欧美日韩一区高清| 7799精品视频| 综合在线一区| 男人的j进女人的j一区| 97伦伦午夜电影理伦片| 在线播放亚洲精品| 欧美日韩在线视频一区二区三区| 97免费公开视频| 欧美黄色片视频| 午夜亚洲福利在线老司机| 久久午夜电影| 中文字幕亚洲日本| 91福利免费| 亚洲欧美另类自拍| 日本黄色大片在线观看| 韩国女主播一区二区三区| 亚洲欧美另类一区| www.91视频com| 成人国产在线激情| 一区二区三区免费观看| 国产香蕉一区二区三区在线视频| 伊人影院在线观看视频| 国产特黄大片aaaa毛片| 亚洲36d大奶网| 久久久久久9999| 污片在线免费观看| 国产精品欧美一区二区三区奶水| 午夜影院欧美| 日本韩国一区二区三区视频| 成人爽a毛片免费啪啪| 亚洲主播在线观看| 欧美一区2区视频在线观看| 一区二区三区视频在线观看视频| 午夜性爽视频男人的天堂| 免费国产阿v视频在线观看| 欧美激情综合色综合啪啪五月| 亚洲精品综合久久中文字幕| 国产精品久久久久久久天堂| 在线观看免费国产视频| 在线观看精品一区二区三区| 国产一区二区导航在线播放| 青青国产在线视频| a∨色狠狠一区二区三区| aaa在线免费观看| 影音先锋中文字幕一区| 国产freexxxx性播放麻豆| 亚洲欧美日韩精品在线| av免费精品一区二区三区| 欧美性free免费| 91tv亚洲精品香蕉国产一区7ujn| 日韩av电影免费播放| ed2k情侣啪啪91av| 在线观看av黄网站永久| 中文字幕av亚洲精品一部二部| 国产精品沙发午睡系列990531| 日韩精品一级毛片在线播放| 成午夜精品一区二区三区软件| 日韩区一区二| 天天操夜夜欢| 成人午夜毛片| 在线精品播放av| 在线高清av| 亚洲无在线观看| 亚洲裸色大胆大尺寸艺术写真| 亚洲国产成人va在线观看麻豆| 亚洲乱码国产乱码精品精软件| 日日干夜夜草| 国产福利在线看| 日韩在线视频在线| 亚洲网站视频| 写真福利片hd在线观看| 亚洲综合社区| 日韩二区在线观看| 亚洲国产一区二区三区在线播放| 一区二区精品免费| 亚洲免费视频在线| 久久精品91久久久久久再现| 亚洲一区二区三区四区中文| 成人在线一区二区三区| 两女双腿交缠激烈磨豆腐| 日韩中字在线观看| 日韩电影在线观看中文字幕| 欧美人乱大交xxxxx| 亚洲天堂网视频| 欧美性一区二区三区| 欧美性受xxx黑人xyx性爽| 色综合久久精品| 乱馆动漫1~6集在线观看| 午夜精品婷婷| 国产精品v欧美精品v日本精品动漫| 国产精品97在线| 大型av综合网站| 99在线观看视频免费| 国产大片一区二区| 国产成人激情av| 亚洲一区二区三区蜜桃| 成人av集中营| 精品无码久久久久久久动漫| 可以免费看的黄色网址| 91国自产精品中文字幕亚洲| 哺乳一区二区三区中文视频| 伊人精彩视频| 菠萝蜜视频网站入口| 成人a免费视频| 欧美午夜电影在线| 欧美一区二区三区电影在线观看| 亚洲蜜桃精久久久久久久| 成**人特级毛片www免费| www.av欧美| 亚洲精品国产成人av在线| 国产又粗又猛又爽又黄91精品| 国内高清免费在线视频| jazzjazz国产精品久久| 亚洲永久免费网站| 久久久成人免费视频| 欧美aⅴ99久久黑人专区| 免费在线观看成年人视频| 国产精品人成电影| 亚洲欧洲在线免费| 国产精品久久久久久av| 91大神精品| 欧美三级在线免费观看| 992tv快乐视频| 在线观看成人一级片| 外国成人在线视频| 国产高清日韩| 亚洲欧洲美洲在线综合| 国产99视频在线观看| 97在线观看免费观看高清| 亚洲视频手机在线观看| 亚洲va在线va天堂成人| 成年人福利网站| 7777精品|