一、定义枚举
在Swift中枚举的定义与其他编程语言中定义枚举不同,在每个枚举元素前面多了一个关键字case, case后紧跟的是枚举元素,下面是定义枚举类型的两种方式。
1. 多个case, 每个枚举元素前都有个case
|
1
2
3
4
5
6
7
8
|
//枚举的定义enum KindOfAnimal { case Cat case Dog case Cow case Duck case Sheep} |
2.一个case搞定所有元素,枚举元素之间使用逗号隔开
|
1
2
3
4
|
//你也可以这样定义枚举类型enum KindOfAnimalTwo { case Cat, Dog, Cow, Duck, Sheep } |
二、枚举类型的使用
定义完枚举类型就是为了使用的对吧,直接使用枚举类型声明变量即可, 在Swift中是不需要typedef来定义枚举类型的,我们可以直接使用枚举类型。
|
1
2
|
//定义枚举变量并赋值var animal1: KindOfAnimal = KindOfAnimal.Cat |
给枚举变量赋值时也可以把枚举类型名省略掉,因为在声明枚举变量时就已经指定了枚举变量的类型。
|
1
|
var animal2: KindOfAnimal = .Dog |
在Switch中使用我们的枚举变量
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
//在Switch…Case中使用枚举switch animal1 { case KindOfAnimal.Cat: println("Cat") case KindOfAnimal.Dog: println("Dog") case KindOfAnimal.Cow: println("Cow") case KindOfAnimal.Duck: println("Duck") case KindOfAnimal.Sheep: println("Sheep") default: println("error = 呵呵")} |
三、给枚举成员赋值
在Swift中声明枚举时,是可以给每个枚举成员赋一个值的,下面的City枚举的成员就被指定了一个值,如下所示:
|
1
2
3
4
5
6
7
|
//给枚举赋值enum City: String{ case Beijing = "北京" case ShangHai = "上海" case GuangZhou = "广州" case ShengZhen = "深圳"} |
使用枚举变量的rawValue可以获取给每个枚举成员赋的值,代码如下:
|
1
2
3
4
5
6
|
//定义枚举变量并赋值var myInCity: City = City.Beijing//获取枚举变量的值var myInCityString: String = myInCity.rawValue;println(myInCityString) //输出:北京 |
四、通过枚举成员的值给枚举变量赋值
什么是通过枚举成员的值给枚举变量赋值呢?举个例子,以上面的枚举类型City为例,假如我们只知道一个枚举成员的值是“北京”,而不知道“北京”这个值对应的枚举成员是”Beijing”, 在Swift中是可以通过“北京”这个值给枚举变量赋一个枚举成员“Beijing”的。
是不是有点绕啊,来点实例吧,下面就是通过枚举成员的原始值给枚举变量赋值的代码
|
1
2
|
//通过枚举成员的值,来给枚举成员赋值var youInCity: City? = City(rawValue: "北京"); |
为啥我们的youInCity是可选值类型的呢?原因很简单,我们不确定枚举City中的成员的值是否含有“北京”,枚举变量youInCity的值是不确定的,所以喽是可选类型的,下面我们就取出youInCity的值,首先判断youInCity是否为City.Beijing, 如果是,说明赋值成功就输出值。
|
1
2
3
4
5
|
//取出youInCity中的值if youInCity == City.Beijing { var cityName: NSString = youInCity!.rawValue println(cityName) //输出:北京} |
找一个枚举成员的值中不包含的字符串用来给枚举变量赋值,观察一下结果,下面的testCity的值打印出来为nil, 因为枚举中没有一个成员的值为“京”。
|
1
2
3
4
5
|
//传入一个枚举中没有的值var testCity: City? = City(rawValue: "京");// testCity为nilprintln(testCity) |
五、枚举值自增
好东西还是要保留的,在Swift中的枚举值如果是整数的话,第一个赋值后,后边的会自增的。关于枚举值自增就不多说了,直接看实例吧。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
//枚举值自增enum Hour: Int{ case One = 1 case Two case Three case Four case Five case Six case Seven case Eight}var hourTest: Int = Hour.Eight.rawValueprintln(hourTest) // hourTest = 8 |
六、枚举关联值
什么是枚举的关联值呢?从字面意思上看是给枚举成员关联一个值,没错,就是在给枚举变量赋值时,给枚举变量关联一个值。在Swift中如何做的呢?就是在声明枚举类型中的元素时使用小括号来制定关联值的类型,然后在给枚举变量赋值的时候关联一个或者多个值即可,直接看实例。
下面的代码是给iOS指定了两个String类型的关联值,在给枚举变量赋值的时候关联两个值。关联这两个值可以在Switch语句中进行使用。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
//枚举的关联值enum mobileLanguage{ case IOS (String, String) case Android (String)}switch iPhone { case mobileLanguage.IOS(let language1, let language2): println("language1 = (language1), language2 = (language2)") case mobileLanguage.Android(let temp): println(temp); default: println("NO")}//输出结果:language1 = Objective-C, language2 = Swift |
七、枚举函数
在Swift中的枚举是可以添加函数的,有没有眼前一亮呢。下面的代码段是在上面的关联值代码的基础上添加了一个描述函数,返回的就是当前枚举变量的枚举信息,如下代码段所示:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
//枚举函数enum mobileLanguageFun{ case IOS (String, String) case Android (String) //定义枚举函数 var description: String{ switch self { case mobileLanguageFun.IOS(let language1, let language2): return "language1 = (language1), language2 = (language2)" case mobileLanguageFun.Android(let temp): return temp default: return ("NO") } }}var myMobile: mobileLanguageFun = mobileLanguageFun.IOS("objc", "swift")println(myMobile.description) //language1 = objc, language2 = swift |
联系信息:邮箱aoxolcom@163.com或见网站底部。















请登录后发表评论
注册
社交帐号登录