swift学习记录(枚举)
2015-12-21 10:01
603 查看
枚举定义了一个通用类型的一组相关值,使我们可以在代码中以一种安全的方式来使用这些值。
基本语法:
使用
enum 关键字定义枚举
enum 枚举名{
case 成员值
}
成员值
一个枚举中定义的值,是枚举的成员值(成员),case 关键字表示一个新的成员值将被定义。
枚举的成员值不会被默认赋予一个整型值。
多个成员值可以出现在同一行上,用逗号隔开:
使用枚举成员值赋值时,可以采用 “枚举名.成员值“的形式
当swift编译器能够根据上下文推断出类型时,也可以使用“ . 成员值”的形式来赋值
原始值
枚举成员可以被默认值(原始值)赋值,其中这些原始值具有相同的数据类型。
基本语法:
enum 枚举名:数据类型{
case 成员值 = 默认值
}
访问 枚举成员原始值
可以使用 枚举成员值的 rawValue 属性来访问 成员的原始值
隐式赋值
在使用原始值为整数或者字符串类型的枚举时,不需要显式的为每一个成员赋值,这时,Swift将会自动赋值。
例如,当使用整数作为原始值时,隐式赋值的值依次递增1。如果第一个值没有被赋初值,将会被自动置为0。
使用原始值初始化枚举变量
如果在定义枚举类型的时候使用了原始值,那么将会自动获得一个初始化方法,这个方法将原始值类型作为参
数,返回枚举成员或者nil
。你可以使用这种初始化方法来创建一个新的枚举变量。
相关值
每个成员的数据类型可以不同。类似C中的联合类型
递归枚举
递归枚举是一种枚举类型,表示它的枚举中,有一个或多个枚举成员拥有该枚举的,其他成员作为相关值。
基本语法:
enum 枚举名{
indirect case 成员值
}
或者
indirect enum 枚举名{
case 成员值
}
在成员值 前加 indirect 关键字,表示该成员值,可以递归,在 枚举类型前加indirect 关键字,表示所有成员都可以递归。
基本语法:
使用
enum 关键字定义枚举
enum 枚举名{
case 成员值
}
enum CompassPoint { case North case South case East case West }
成员值
一个枚举中定义的值,是枚举的成员值(成员),case 关键字表示一个新的成员值将被定义。
枚举的成员值不会被默认赋予一个整型值。
多个成员值可以出现在同一行上,用逗号隔开:
<span style="font-size:14px;">enum Planet { case Mercury, Venus, Earth, Mars, Jupiter, Saturn, Uranus, Neptune }</span>
使用枚举成员值赋值时,可以采用 “枚举名.成员值“的形式
var value = CompassPoint.North
当swift编译器能够根据上下文推断出类型时,也可以使用“ . 成员值”的形式来赋值
var directionToHead= CompassPoint.North directionToHead = .West如上,value 第一次 被赋值,第二次给value赋值时,编译器就能推断出是CompassPoint 类型,所以可以直接用 .West 给value赋值,增强代码的可读性。
原始值
枚举成员可以被默认值(原始值)赋值,其中这些原始值具有相同的数据类型。
基本语法:
enum 枚举名:数据类型{
case 成员值 = 默认值
}
enum WeekDays:Int{ case Monday = 0 case Tuesday = 1 case Wednesday = 2 case Thursday = 3 case Friday = 4 }
访问 枚举成员原始值
可以使用 枚举成员值的 rawValue 属性来访问 成员的原始值
<span style="font-size:14px;">var day = WeekDays.Friday.rawValue print(day) //4</span>
隐式赋值
在使用原始值为整数或者字符串类型的枚举时,不需要显式的为每一个成员赋值,这时,Swift将会自动赋值。
例如,当使用整数作为原始值时,隐式赋值的值依次递增1。如果第一个值没有被赋初值,将会被自动置为0。
enum WeekDays:Int{ case Monday case Tuesday case Wednesday case Thursday case Friday } var day = WeekDays.Friday.rawValue print(day) //4 </span>
使用原始值初始化枚举变量
如果在定义枚举类型的时候使用了原始值,那么将会自动获得一个初始化方法,这个方法将原始值类型作为参
数,返回枚举成员或者nil
。你可以使用这种初始化方法来创建一个新的枚举变量。
enum WeekDays:String{ case Monday = "Monday" case Tuesday case Wednesday case Thursday case Friday } var day = WeekDays(rawValue: "Friday") //通过原始值 Friday 创建一个枚举变量 print(day) //Optional(WeekDays.Friday)因为 不是所有的传入值都能匹配到一个原始值,所以返回值为 可选类型。
相关值
每个成员的数据类型可以不同。类似C中的联合类型
enum Figure { case type (String) case area (Int,Int) } var type = Figure.type("长方形") var area = Figure.area(100, 200) print("type is \(type) and area is \(area)") //type is type("长方形") and area is area(100, 200)
递归枚举
递归枚举是一种枚举类型,表示它的枚举中,有一个或多个枚举成员拥有该枚举的,其他成员作为相关值。
基本语法:
enum 枚举名{
indirect case 成员值
}
或者
indirect enum 枚举名{
case 成员值
}
在成员值 前加 indirect 关键字,表示该成员值,可以递归,在 枚举类型前加indirect 关键字,表示所有成员都可以递归。
enum ArithmeticExpression { case Number(Int) indirect case Addition(ArithmeticExpression, ArithmeticExpression) indirect case Multiplication(ArithmeticExpression, ArithmeticExpression) } func evaluate(expression: ArithmeticExpression) -> Int { switch expression { case .Number(let value): return value case .Addition(let left, let right): return evaluate(left) + evaluate(right) case .Multiplication(let left, let right): return evaluate(left) * evaluate(right) } } // 计算 (5 + 4) * 2 let five = ArithmeticExpression.Number(5) let four = ArithmeticExpression.Number(4) let sum = ArithmeticExpression.Addition(five, four) let product = ArithmeticExpression.Multiplication(sum, ArithmeticExpression.Number(2)) print(evaluate(product)) // 输出 "18"
相关文章推荐
- Swift 正式开源, 包括 Swift 核心库和包管理器
- Swift 控制流(笔记)
- Swift.cn Alpha聚乐部 总结
- IOS(swift)-数据存储 · 用NSUserDefaults存储配置信息
- swift-基础06-元组和Optionals(可选)
- swift-基础05-类型别名和Bool型
- swift-基础04-数字类型转换
- iOS --- 总结Swift中常用的全局函数和extension(持续更新中)
- swift 进阶笔记 (一) —— 可选型
- 基于EF6的快速开发Web框架——Swift.Net
- OpenStack中Swift和cinder区别
- iOS开发——UI篇Swift篇&UISegmentedControl
- 项目开发笔记-2015.12.20-swift
- 关于swift的访问级别
- OC和Swift中循环引用的问题
- 教你3行代码行成高清二维码(Swift1.1)
- 教你三行代码生成高清二维码(Swift1.1)
- swift之auto layout
- swift和storyborad环境下通过xib自定义TableViewCell
- Swift语法学习之 类和结构体