想必写过程序的童鞋对枚举类型并不陌生吧,使用枚举类型的好处是多多的,在这儿就不做过多的赘述了。Fundation框架和UIKit中的枚举更是数不胜数,枚举可以使你的代码更易阅读并且可以提高可维护性。在Swift语言中的枚举可谓是让人眼前一亮。在Swift中的枚举不仅保留了大部分编程语言中枚举的特性,同时还添加了一些好用而且实用的新特性,在本篇博客中将领略一些Swift中枚举类型的魅力。

  有小伙伴会问,不就是枚举么,有什么好说的。在Swift中的枚举怎不然,Swift中的枚举的功能要强大的多,不仅可以给枚举元素绑定值,而且可以给枚举元素关联多个值,同时还可以通过元素的值给一个枚举变量赋一个枚举值,并且枚举中可以定义枚举函数。下面将要开始窥探一下Swift中的枚举。

  一、定义枚举

    在Swift中枚举的定义与其他编程语言中定义枚举不同,在每个枚举元素前面多了一个关键字case,  case后紧跟的是枚举元素,下面是定义枚举类型的两种方式。

    1. 多个case, 每个枚举元素前都有个case

 //枚举的定义
enum KindOfAnimal {
case Cat
case Dog
case Cow
case Duck
case Sheep
}

    2.一个case搞定所有元素,枚举元素之间使用逗号隔开

 //你也可以这样定义枚举类型
enum KindOfAnimalTwo {
case Cat, Dog, Cow, Duck, Sheep
}

  二、枚举类型的使用

    定义完枚举类型就是为了使用的对吧,直接使用枚举类型声明变量即可, 在Swift中是不需要typedef来定义枚举类型的,我们可以直接使用枚举类型。

//定义枚举变量并赋值
var animal1: KindOfAnimal = KindOfAnimal.Cat

    给枚举变量赋值时也可以把枚举类型名省略掉,因为在声明枚举变量时就已经指定了枚举变量的类型。

var animal2: KindOfAnimal = .Dog

    在Switch中使用我们的枚举变量

 //在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枚举的成员就被指定了一个值,如下所示:

//给枚举赋值
enum City: String{
case Beijing = "北京"
case ShangHai = "上海"
case GuangZhou = "广州"
case ShengZhen = "深圳"
}

    使用枚举变量的rawValue可以获取给每个枚举成员赋的值,代码如下:

//定义枚举变量并赋值
var myInCity: City = City.Beijing //获取枚举变量的值
var myInCityString: String = myInCity.rawValue;
println(myInCityString) //输出:北京

  四、通过枚举成员的值给枚举变量赋值

    什么是通过枚举成员的值给枚举变量赋值呢?举个例子,以上面的枚举类型City为例,假如我们只知道一个枚举成员的值是“北京”,而不知道“北京”这个值对应的枚举成员是"Beijing", 在Swift中是可以通过“北京”这个值给枚举变量赋一个枚举成员“Beijing”的。

    是不是有点绕啊,来点实例吧,下面就是通过枚举成员的原始值给枚举变量赋值的代码

//通过枚举成员的值,来给枚举成员赋值
var youInCity: City? = City(rawValue: "北京");

    为啥我们的youInCity是可选值类型的呢?原因很简单,我们不确定枚举City中的成员的值是否含有“北京”,枚举变量youInCity的值是不确定的,所以喽是可选类型的,下面我们就取出youInCity的值,首先判断youInCity是否为City.Beijing, 如果是,说明赋值成功就输出值。

//取出youInCity中的值
if youInCity == City.Beijing {
var cityName: NSString = youInCity!.rawValue
println(cityName) //输出:北京
}

    找一个枚举成员的值中不包含的字符串用来给枚举变量赋值,观察一下结果,下面的testCity的值打印出来为nil, 因为枚举中没有一个成员的值为“京”。

//传入一个枚举中没有的值
var testCity: City? = City(rawValue: "京"); // testCity为nil
println(testCity)

  五、枚举值自增

    好东西还是要保留的,在Swift中的枚举值如果是整数的话,第一个赋值后,后边的会自增的。关于枚举值自增就不多说了,直接看实例吧。

//枚举值自增
enum Hour: Int{
case One =
case Two
case Three
case Four
case Five
case Six
case Seven
case Eight
} var hourTest: Int = Hour.Eight.rawValue
println(hourTest) // hourTest = 8

  六、枚举关联值

    什么是枚举的关联值呢?从字面意思上看是给枚举成员关联一个值,没错,就是在给枚举变量赋值时,给枚举变量关联一个值。在Swift中如何做的呢?就是在声明枚举类型中的元素时使用小括号来制定关联值的类型,然后在给枚举变量赋值的时候关联一个或者多个值即可,直接看实例。

    下面的代码是给iOS指定了两个String类型的关联值,在给枚举变量赋值的时候关联两个值。关联这两个值可以在Switch语句中进行使用。

//枚举的关联值
enum mobileLanguage{
case IOS (String, String)
case Android (String)
} var iPhone: mobileLanguage = mobileLanguage.IOS("Objective-C", "Swift") 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中的枚举是可以添加函数的,有没有眼前一亮呢。下面的代码段是在上面的关联值代码的基础上添加了一个描述函数,返回的就是当前枚举变量的枚举信息,如下代码段所示:

 //枚举函数
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

  

  今天的博客内容也够长了,就先到这儿吧,以后会继续更新关于Swift内容的博客的。

窥探Swift之别样的枚举类型的更多相关文章

  1. Swift 学习笔记 enum 枚举类型

    异端,异端啊,我感觉这是map吧? enum ATMStatus { case Success(Int) case Error(String) } func withdraw(amount: Int) ...

  2. 窥探Swift编程之错误处理与异常抛出

    在Swift 2.0版本中,Swift语言对其错误处理进行了新的设计,当然了,重新设计后的结果使得该错误处理系统用起来更爽.今天博客的主题就是系统的搞一下Swift中的错误处理,以及看一下Swift中 ...

  3. 窥探Swift系列博客说明及其Swift版本间更新

    Swift到目前为止仍在更新,每次更新都会推陈出新,一些Swift旧版本中的东西在新Swift中并不适用,而且新版本的Swift会添加新的功能.到目前为止,Swift为2.1版本.去年翻译的Swift ...

  4. 窥探Swift编程之强大的Switch

    之前初识Swift中的Switch语句时,真的是让人眼前一亮,Swift中Switch语句有好多特有而且特好用的功能.说到Switch, 只要是写过程序的小伙伴对Switch并不陌生.其在程序中的出镜 ...

  5. swift 枚举类型

    1:swift的枚举类型是一系列的值,不同于c语言中枚举类型是整数类型.每个枚举定义了个新的类型 2:switch类型匹配 2.1枚举类型和switch单个匹配 enum PlatType{ case ...

  6. Swift编程语言学习11—— 枚举全局变量、局部变量与类型属性

    全局变量和局部变量 计算属性和属性监视器所描写叙述的模式也能够用于全局变量和局部变量,全局变量是在函数.方法.闭包或不论什么类型之外定义的变量,局部变量是在函数.方法或闭包内部定义的变量. 前面章节提 ...

  7. 【Swift学习笔记00】——enumeration枚举类型遵循协议protocol

    Apple官方文档:The Swift Programming LanguageProtocols and Extensions一节的小节练习,要求自行定义一个enumeration枚举类型,并且遵循 ...

  8. 窥探Swift之函数与闭包的应用实例

    今天的博客算是比较基础的,还是那句话,基础这东西在什么时候都是最重要的.说到函数,只要是写过程序就肯定知道函数是怎么回事,今天就来讨论一下Swift中的函数的特性以及Swift中的闭包.今天的一些小实 ...

  9. 窥探Swift之类的继承与类的访问权限

    上一篇博客<窥探Swift之别具一格的Struct和Class>的博客可谓是给Swift中的类开了个头.关于类的内容还有很多,今天就来搞一下类中的继承以及类的访问权限.说到类的继承,接触过 ...

随机推荐

  1. python小程序

    使用python实现在crt中捕捉出现的异常信息,并统计出现的次数: #$language = "Python" #$interface = "1.0" def ...

  2. mac和virtualbox虚拟机共享

    virtualbox安装增强工具 打开虚拟机,devices—shared folders—settings 打开窗口,选择“共享文件夹”,点击“带加号的文件夹图标”, 点击文件夹路径,选择其它,然后 ...

  3. PHP基础面试题

    1.PHP的意思? 答:PHP是一个基于服务端来创建动态网站的脚本语言,您可以用PHP和HTML生成网站主页 2.谈谈asp,php,jsp的优缺点? 答:ASP全名Active Server Pag ...

  4. Python之路第一课Day4--随堂笔记(迭代生成装饰器)

    上节回顾: 1.集合 a.关系测试 b.去重 2.文件操作及编码 3.函数 4.局部变量和全局变量 上节回顾 本节课内容: 1.迭代器生成器 2.装饰器 3.json pickle数据序列化 4.软件 ...

  5. js正则获取url所带参数值

    在js字符串对象原型中添加这个获取链接参数值方法,getAddrVal(): String.prototype.getAddrVal = String.prototype.getAddrVal||fu ...

  6. qemu ubuntu for zynq(armhf)

    apt-get install qemu-user-static qemu-system mkdir qemu-ubuntu qemu-debootstrap --arch=armhf trusty ...

  7. Server.Transfer 和 Response.Redirect 用法区别

    在ASP.NET中,在后台传值方式目前大多都是用 Response.Redirect("页面地址") 来重定向页面的,但是现在还有一种方式也可以达到重定向页面的作用,而且在某些时刻 ...

  8. C#用扩展方法进行自动生成添加删除对象转换的功能

    public static class ExtendedModel { #region 实体类的增删改查 #region 添加 public static string AddStr(this obj ...

  9. DBImport v3.5 中文版发布:数据库定时同步及文档生成工具(IT人员必备)

    前言: 趁着最近的休息时间,只能多勤快些:多写代码,多更新文章. 因为一旦投入新的工作,估计博客又会恢复到一年才产几篇的状态. 对于DBImport,因为用户的意见,增加了一个亮点功能,让软件B格升为 ...

  10. Edge.js:让.NET和Node.js代码比翼齐飞

    通过Edge.js项目,你可以在一个进程中同时运行Node.js和.NET代码.在本文中,我将会论述这个项目背后的动机,并描述Edge.js提供的基本机制.随后将探讨一些Edge.js应用场景,它在这 ...