![[连载]Swift开发入门(05)--- 枚举,第1张 [连载]Swift开发入门(05)--- 枚举,第1张](/aiimages/%5B%E8%BF%9E%E8%BD%BD%5DSwift%E5%BC%80%E5%8F%91%E5%85%A5%E9%97%A8%EF%BC%8805%EF%BC%89---+%E6%9E%9A%E4%B8%BE.png)
枚举是定义符号常量的手段,它把一堆相似的值组织在一起。例如你在指定文字对齐方式的时候通常有三种可选的值:左对齐、右对齐和居中对齐;你在处理游戏中的方法时可能的取值有东、西、南、北。Swift中的枚举比你了解的其他语言的枚举更加强大,它的行为类似于类和结构体,它甚至可以有自己的方法,包括构造器。
创建枚举我们先通过一个简单的例子来认识一下枚举。玩过扑克牌的都知道,扑克有四种花色,分别是黑桃(spade)、红心(heart)、草花(club)和方块(diamond),如果我们要做一个扑克游戏,那么就可以用枚举来描述这四种花色,代码如下所示:
enum Suite { case Spade case Heart case Club case Diamond}
又比如我们要做一个绘图软件,该软件支持绘制矩形、圆形和三角形,那么可以用下面的枚举来表示不同类型的图形。
enum Shape { case Rectangle case Triangle case Circle}在switch多分支结构中使用枚举
我们可以使用switch多分支结构来处理枚举类型的值,如下所示:
var shape:Shape = Shape.Circleswitch(shape) {case .Rectangle: println("You choose a rectangle") breakcase .Triangle: println("You choose a triangle") breakcase .Circle: println("You choose a circle") break}
Swift中的switch语句要求必须覆盖所有的可能,如果你如下书写上面这段代码,就会产生一个编译错误:“switch must be exhaustive,consIDer adding a default clause.”。
var shape:Shape = Shape.Circleswitch(shape) {case .Rectangle: println("You choose a rectangle") breakcase .Triangle: println("You choose a triangle") break}
按照错误提示,我们可以添加一个default分支来消除此编译错误,当所有的case都没有匹配成功时,就会执行default分支。
var shape:Shape = Shape.Circleswitch(shape) {case .Rectangle: println("You choose a rectangle") breakcase .Triangle: println("You choose a triangle") breakdefault: println("You choose a circle") break}
当然也可以在一个case中书写多种可能性,这一点也是Swift对switch结构的改进,不同于Java、C#、JavaScript这样的语言,完整的代码如下所示:
var shape:Shape = Shape.Squareswitch(shape) {case .Rectangle,.Square,.Diamond: println("You choose a quadrilateral") breakcase .Triangle: println("You choose a triangle") breakcase .Circle,.oval: println("You choose a circle or an oval") break}枚举类型
在Swift中,枚举在某些程度上跟类和结构体非常类似,它和结构体有相同的值语义,因此也是基于栈分配存储空间。有些枚举甚至可以有成员方法,如下所示:
import Foundationenum Shape { case Rectangle(wIDth: Double,height: Double) case Square(sIDe: Double) case Triangle(base: Double,height: Double) case Circle(radius: Double) func area() -> Double { var result:Double = 0; switch(self) { case .Rectangle(let wIDth,let height): result = wIDth * height case .Square(let sIDe): result = sIDe * sIDe case .Triangle(let base,let height): result = base * height case .Circle(let radius): result = M_PI * radius * radius } return result }}var circle = Shape.Circle(radius: 5)circle.area()
我们还可以在枚举中添加一个工厂方法来创建枚举类型的变量,如下所示:
import Foundationenum Shape { case Rectangle(wIDth: Double,let height): result = base * height case .Circle(let radius): result = M_PI * radius * radius } return result } static func factory(shapeType: String) -> Shape? { var shape:Shape? switch(shapeType) { case "rectangle": shape = Shape.Rectangle(wIDth: 5,height: 10) case "square": shape = Shape.Square(sIDe: 5) case "triangle": shape = Shape.Triangle(base: 5,height: 10) case "circle": shape = Shape.Circle(radius: 5) default: shape = nil } return shape }}var rect = Shape.factory("rectangle")rect!.area()
我们之前讲过的可空类型其实也是枚举类型,它的定义如下所示:
enum Optional<T> : NilliteralConvertible { case None case Some(T) init() init(_ some: T) static func convertFromNilliteral() -> T?}总结
以上是内存溢出为你收集整理的[连载]Swift开发入门(05)--- 枚举全部内容,希望文章能够帮你解决[连载]Swift开发入门(05)--- 枚举所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)