[连载]Swift开发入门(05)--- 枚举

??枚举是定义符号常量的手段,它把一堆相似的值组织在一起。例如你在指定文字对齐方式的时候通常有三种可选的值:左对齐、右对齐和居中对齐;你在处理游戏中的方法时可能的取值有东、西、南、北。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.Circle

switch(shape) {
case .Rectangle:
    println("You choose a rectangle")
    break
case .Triangle:
    println("You choose a triangle")
    break
case .Circle:
    println("You choose a circle")
    break
}

??Swift中的switch语句要求必须覆盖所有的可能,如果你如下书写上面这段代码,就会产生一个编译错误:“switch must be exhaustive, consider adding a default clause.”。

var shape:Shape = Shape.Circle

switch(shape) {
case .Rectangle:
    println("You choose a rectangle")
    break
case .Triangle:
    println("You choose a triangle")
    break
}

??按照错误提示,我们可以添加一个default分支来消除此编译错误,当所有的case都没有匹配成功时,就会执行default分支。

var shape:Shape = Shape.Circle

switch(shape) {
case .Rectangle:
    println("You choose a rectangle")
    break
case .Triangle:
    println("You choose a triangle")
    break
default:
    println("You choose a circle")
    break
}

??当然也可以在一个case中书写多种可能性,这一点也是Swift对switch结构的改进,不同于Java、C#、JavaScript这样的语言,完整的代码如下所示:

var shape:Shape = Shape.Square

switch(shape) {
case .Rectangle, .Square, .Diamond:
    println("You choose a quadrilateral")
    break
case .Triangle:
    println("You choose a triangle")
    break
case .Circle, .Oval:
    println("You choose a circle or an oval")
    break
}

枚举类型

??在Swift中,枚举在某些程度上跟类和结构体非常类似,它和结构体有相同的值语义,因此也是基于栈分配存储空间。有些枚举甚至可以有成员方法,如下所示:

import Foundation

enum 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 Foundation

enum 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
    }

    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?
}
时间: 2024-10-06 00:12:26

[连载]Swift开发入门(05)--- 枚举的相关文章

[连载]Swift开发入门(06)--- 函数式编程

??面向对象编程和函数式编程是目前最主流的两种编程范式,而关于这两种范式孰优孰劣的讨论一直都没有停止过.事实上,真正理解两种编程范式的程序员不会武断的说这二者孰优孰劣,因为任何编程语言都没有什么灵丹妙药让其使用者成为优秀的程序员.其实,像Java这样很经典的面向对象的编程语言,也能够看到函数式编程的影子,如果你使用过访问者模式.命令模式,如果你使用过接口回调,你实际上已经使用了函数式编程的理念,而且在新版本的Java中,已经开始支持Lambda表达式和函数式接口,这些都是Java为了支持函数式编

论 Swift 开发入门:搜索框(UISearchBar)

转载请声明出处:http://blog.csdn.net/jinnchang/article/details/44827923 ------------------------------------------------------------------------------------------ 代码示例 // // ViewController.swift // UISearchBarSample // // Created by jinnchang on 15/4/1. // C

论 Swift 开发入门:活动指示器(UIActivityIndicatorView)

转载请声明出处:http://blog.csdn.net/jinnchang/article/details/44828021 ------------------------------------------------------------------------------------------ 代码示例 // // ViewController.swift // UIActivityIndicatorViewSample // // Created by jinnchang on

论 Swift 开发入门 : 选择器(UIPickerView)

转载请声明出处:http://blog.csdn.net/jinnchang/article/details/44487269 ------------------------------------------------------------------------------------------ 1.Summary -------------------------------------------------------------------------------------

论 Swift 开发入门 : 滑块(UISlider)

转载请声明出处:http://blog.csdn.net/jinnchang/article/details/44487407 ------------------------------------------------------------------------------------------ 1.Summary -------------------------------------------------------------------------------------

论 Swift 开发入门 : 进度条(UIProgressView)

转载请声明出处:http://blog.csdn.net/jinnchang/article/details/44802019 ------------------------------------------------------------------------------------------ 概述 ------------------------------------------------------------------------------------------ 代

论 Swift 开发入门 : 按钮(UIButton)

转载请声明出处:http://blog.csdn.net/jinnchang/article/details/44403537 1.UIButton 概述 继承关系:UIButton -> UIControl -> UIView 控件样式: 2.UIButton 初始化 (1)使用 buttonWithType 构建按钮,已有的六种类型如下: enum UIButtonType : Int { case Custom // 自定义风格 case System // 圆角矩形 case Deta

论 Swift 开发入门 : 开关(UISwitch)

转载请声明出处:http://blog.csdn.net/jinnchang/article/details/44407193 1.UIButton 概述 继承关系:UISwitch -> UIControl -> UIView 2.控件样式 3.使用示例 var myButton: UIButton? var mySwitch: UISwitch? override func viewDidLoad() { self.myButton = UIButton.buttonWithType(.S

Swift开发语法

Swift开发入门 简介 Swift 语言由苹果公司在 2014 年推出,用来撰写 OS X 和 iOS 应用程序 2014 年,在 Apple WWDC 发布 历史 2010 年 7 月,苹果开发者工具部门总监 Chris Lattner(克里斯·拉特纳) 开始着手 Swift 编程语言的设计工作 用一年时间,完成基本架构 Swift 大约历经 4 年的开发期,2014 年 6 月发表 克里斯·拉特纳 ) 特色 苹果宣称 Swift 的特点是:快速.现代.安全.互动,而且明显优于 Object