想必写过程序的童鞋对枚举类型并不陌生吧,使用枚举类型的好处是多多的,在这儿就不做过多的赘述了。Fundation框架和UIKit中的枚举更是数不胜数,枚举可以使你的代码更易阅读并且可以提高可维护性。在Swift语言中的枚举可谓是让人眼前一亮。在Swift中的枚举不仅保留了大部分编程语言中枚举的特性,同时还添加了一些好用而且实用的新特性,在本篇博客中将领略一些Swift中枚举类型的魅力。
有小伙伴会问,不就是枚举么,有什么好说的。在Swift中的枚举怎不然,Swift中的枚举的功能要强大的多,不仅可以给枚举元素绑定值,而且可以给枚举元素关联多个值,同时还可以通过元素的值给一个枚举变量赋一个枚举值,并且枚举中可以定义枚举函数。下面将要开始窥探一下Swift中的枚举。
一、定义枚举
在Swift中枚举的定义与其他编程语言中定义枚举不同,在每个枚举元素前面多了一个关键字case,case后紧跟的是枚举元素,下面是定义枚举类型的两种方式。
1. 多个case,每个枚举元素前都有个case
1
2
3
4
5
6
7
8
|
enumKindOfAnimal{
case
Cat
Dog
Cow
Duck
Sheep
}
|
2.一个case搞定所有元素,枚举元素之间使用逗号隔开
4
//你也可以这样定义枚举类型
enumKindOfAnimalTwo{
Cat,Dog,Cow,Duck,Sheep
二、枚举类型的使用
定义完枚举类型就是为了使用的对吧,直接使用枚举类型声明变量即可,在Swift中是不需要typedef来定义枚举类型的,我们可以直接使用枚举类型。
2
//定义枚举变量并赋值
var
animal1:KindOfAnimal=KindOfAnimal.Cat
|
给枚举变量赋值时也可以把枚举类型名省略掉,因为在声明枚举变量时就已经指定了枚举变量的类型。
1
animal2:KindOfAnimal=.Dog
|
在Switch中使用我们的枚举变量
8
9
10
11
12
13
14
15
//在Switch…Case中使用枚举
switch
animal1{
KindOfAnimal.Cat:
println(
"Cat"
)
KindOfAnimal.Dog:
"Dog"
)
KindOfAnimal.Cow:
"Cow"
)
KindOfAnimal.Duck:
"Duck"
)
KindOfAnimal.Sheep:
"Sheep"
)
default
:
"error=呵呵"
)
三、给枚举成员赋值
在Swift中声明枚举时,是可以给每个枚举成员赋一个值的,下面的City枚举的成员就被指定了一个值,如下所示:
7
//给枚举赋值
enumCity:String{
Beijing=
"北京"
ShangHai=
"上海"
GuangZhou=
"广州"
ShengZhen=
"深圳"
使用枚举变量的rawValue可以获取给每个枚举成员赋的值,代码如下:
6
myInCity:City=City.Beijing
myInCityString:String=myInCity.rawValue;
println(myInCityString)
|
四、通过枚举成员的值给枚举变量赋值
什么是通过枚举成员的值给枚举变量赋值呢?举个例子,以上面的枚举类型City为例,假如我们只知道一个枚举成员的值是“北京”,而不知道“北京”这个值对应的枚举成员是"Beijing",在Swift中是可以通过“北京”这个值给枚举变量赋一个枚举成员“Beijing”的。
是不是有点绕啊,来点实例吧,下面就是通过枚举成员的原始值给枚举变量赋值的代码
//通过枚举成员的值,来给枚举成员赋值
youInCity:City?=City(rawValue:
"北京"
);
为啥我们的youInCity是可选值类型的呢?原因很简单,我们不确定枚举City中的成员的值是否含有“北京”,枚举变量youInCity的值是不确定的,所以喽是可选类型的,下面我们就取出youInCity的值,首先判断youInCity是否为City.Beijing,如果是,说明赋值成功就输出值。
5
//取出youInCity中的值
if
youInCity==City.Beijing{
cityName:Nsstring=youInCity!.rawValue
println(cityName)
找一个枚举成员的值中不包含的字符串用来给枚举变量赋值,观察一下结果,下面的testCity的值打印出来为nil,因为枚举中没有一个成员的值为“京”。
//传入一个枚举中没有的值
testCity:City?=City(rawValue:
"京"
);
println(testCity)
五、枚举值自增
好东西还是要保留的,在Swift中的枚举值如果是整数的话,第一个赋值后,后边的会自增的。关于枚举值自增就不多说了,直接看实例吧。
14
//枚举值自增
enumHour:Int{
One=1
Two
Three
Four
Five
Six
Seven
Eight
}
hourTest:Int=Hour.Eight.rawValue
println(hourTest)
|
六、枚举关联值
什么是枚举的关联值呢?从字面意思上看是给枚举成员关联一个值,没错,就是在给枚举变量赋值时,给枚举变量关联一个值。在Swift中如何做的呢?就是在声明枚举类型中的元素时使用小括号来制定关联值的类型,然后在给枚举变量赋值的时候关联一个或者多个值即可,直接看实例。
下面的代码是给iOS指定了两个String类型的关联值,在给枚举变量赋值的时候关联两个值。关联这两个值可以在Switch语句中进行使用。
15
16
17
18
19
//枚举的关联值
enummobileLanguage{
IOS(String,String)
Android(String)
}
iPhone:mobileLanguage=mobileLanguage.IOS(
"Objective-C"
,
"Swift"
)
iPhone{
mobileLanguage.IOS(letlanguage1,letlanguage2):
"language1=\(language1),language2=\(language2)"
)
mobileLanguage.Android(lettemp):
println(temp);
:
"NO"
)
}
|
七、枚举函数
在Swift中的枚举是可以添加函数的,有没有眼前一亮呢。下面的代码段是在上面的关联值代码的基础上添加了一个描述函数,返回的就是当前枚举变量的枚举信息,如下代码段所示:
19
20
21
22
//枚举函数
enummobileLanguageFun{
Android(String)
description:String{
self{
mobileLanguageFun.IOS(letlanguage1,letlanguage2):
return
ottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:1.1em!important; outline:0px!important; overflow:visible!important; position:static!important; right:auto!important; top:auto!important; vertical-align:baseline!important; width:auto!important; font-family:Consolas,language2=\(language2)"
mobileLanguageFun.Android(lettemp):
return
temp
(
)
}
}
}
myMobile:mobileLanguageFun=mobileLanguageFun.IOS(
"objc"
"swift"
)
println(myMobile.description)
|
今天的博客内容也够长了,就先到这儿吧,以后会继续更新关于Swift内容的博客的。
-
作者:青玉伏案
-
出处:http://www.cnblogs.com/ludashi/
-
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
-
如果文中有什么错误,欢迎指出。以免更多的人被误导。
相关文章
软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...
| | | |