枚举
1.枚举语法
用enum并把定义放在大括号内,枚举中被定义的值是枚举的成员,case关键字表示新定义的一个成员
- enumSomeEnumeration{
-
- }
- enumCompassPoint{
- caseNorth
- caseSouth
- caseEast
- caseWest
- //多个成员可以出现在同一行
- enumPlanet{
- caseMercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune
- }
区别于C和OC,Swift中的枚举成员创建的时候不会赋予默认的整数值,相反,不同的成员在CompassPoint的一种显式定义中拥有各自不同的值
每个枚举相当于定义了一个全新的类型,名字以大写开头,尽量使用单数形式易于理解
vardirectionToHead=CompassPoint.West
- directionToHead=.East
-
2.匹配枚举值和switch语句
directionToHead=.South
- switchdirectionToHead{
- case.North:
- println("Lotsofplanetshaveanorth")
- case.South:
- println("Watchoutforpenguins")
- case.East:
- println("Wherethesunrises")
- case.West:
- println("Wheretheskiesareblue")
- //prints"Watchoutforpenguins"
当不需要匹配全部成员时,提供一个默认的default来表示所有未被提出的成员
letsomePlanet=Planet.Earth
- switchsomePlanet{
- case.Earth:
- println("Mostlyharmless")
- default:
- println("Notasafeplaceforhumans")
- //prints"Mostlyharmless"
3.实例值
定义条形码和二维码类型,然后使用其中一种类型创建条码
enumBarcode{
- caseUPCA(Int,Int,Int)
- caseQRCode(String)
- }
- varproductBarcode=Barcode.UPCA(8,85909_51226,3)
- //同一种类型的商品可以分配给一个不同类型的条形码
- productBarcode=.QRCode("ABCDEFGHIJKLMNOP")
- //然后可以直接使用了
- switchproductBarcode{
- case.UPCA(letnumberSystem,letidentifier,letcheck):
- println("UPC-Awithvalueof(numberSystem),(identifier),(check).")
- case.QRCode(letproductCode):
- println("QRcodewithvalueof(productCode).")
- //prints"QRcodewithvalueofABCDEFGHIJKLMNOP."
- //简化写法
- caselet.UPCA(numberSystem,identifier,check):
- caselet.QRCode(productCode):
- //prints"QRcodewithvalueofABCDEFGHIJKLMNOP."
4.原始值 Raw Values
以下说明一个枚举的成员如何声明他们存储不同类型的实例值。作为实例值(原始值)的替代,枚举成员可以被默认值预先填充,他们具有相同的类型
//枚举成员存储原始ASCII值的例子,ASCIIControlCharacter的枚举的原始值类型被定义为字符类型Character
- enumASCIIControlCharacter:Character{
- caseTab="t"
- caseLineFeed="n"
- caseCarriageReturn="r"
- }
原始值可以是字符串,字符,或者任何整数类型或浮点型,每一个原始值在声明中必须是唯一的,当整型值用于原始值,如果其他枚举成员没有赋值,则会自动递增
Planet:Int{
- caseMercury=1,0); background-color:inherit">//toRaw方法可以访问枚举成员的原始值
- letearthsOrder=Planet.Earth.toRaw()
- //earthsOrderis3
- //使用枚举的fromRaw方法找具有特定原始值的枚举成员
- letpossiblePlanet=Planet.fromRaw(7)
- //possiblePlanetisoftypePlanet?andequalsPlanet.Uranus
- fromRaw方法可以返回一个可选的枚举成员
- letpositionToFind=9
- ifletsomePlanet=Planet.fromRaw(positionToFind){
- switchsomePlanet{
- case.Earth:
- println("Mostlyharmless")
- default:
- println("Notasafeplaceforhumans")
- }else{
- println("Thereisn'taplanetatposition(positionToFind)")
- //prints"Thereisn'taplanetatposition9"
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|