Swift快速入门之枚举与结构
来源:互联网 发布:oracle sql执行顺序 编辑:程序博客网 时间:2024/05/17 03:43
- 枚举
使用enum创建一个枚举,像类一样,枚举也可以有方法。
下面定义扑克的点数值:
enum Rank:Int{ case Ace = 1 case Two,Three,Four,Five,Six,Seven,Eight,Nine,Ten case Jack,Queen,King func name()->String{ switch self { case .Ace: return "Ace" case .Jack: return "Jack" case .Queen: return "Queen" case .King: return "King" default: return String(self.rawValue) } }}let aaaa = Rank.Acelet bbbb = Rank(rawValue: 1)let cccc = aaaa.rawValueprint(aaaa.name())
此枚举的原始数据类型为Int,只需要指定枚举中首项(case)的值,后面的case的值会以依次增加的方式自动推算出来。你也可以将浮点或字符串作为枚举的原始数据类型。用rawValue属性来取得某个枚举case的原始值。使用初始化方法 init?(rawValue:)(带个“?”表示返回的结果可能是nil) 可以从一个原始值创建一个枚举实例。比如上面的bbbb。算式aaaa==bbbb的结果会是true(Swift中的Bool型的值是true和false,而不是YES和NO)。
一个枚举各case的值都是真实的值,并不是用于表示原始值的另外一种写法,如果某个case没有有意义的原始值,就不要提供它。
下面这个枚举定义了扑克的花色:
enum Suit{ case Spades,Hearts,Diamonds,Clubs func name()->String{ switch self{ case Suit.Spades: return "Spades" case .Hearts: return "Heart" case .Diamonds: return "Diamonds" case .Clubs: return "Clubs" } }}let hearts = Suit.Hearts
我们可以看到switch语句里,枚举项的访问可以省掉前面的类型名,这个得看情况,只有能推断出来的时候才可以省略,省略时只要一个点就可以了。
枚举的一个case实例可以带上附加的数据。同一个case的不同实例可以带着不同的附加数据。附加数据与原始数据不一样,同一个case的不同实例,它们的原始数据都一样,并且原始数据是在定义枚举时就定死了。
例如,从服务器获取日出和日落时间。服务器可以返回时间或返回错误信息,定义一个枚举:
enum ServerResponse{ case Result(String,String) case Error(String)}let success = ServerResponse.Result("6:00 am", "8:09 pm")let failure = ServerResponse.Error("Out of cheese.")switch success{case let .Result(sunrise,sunset): print("Sunrise is at \(sunrise) and sunset is at \(sunset).")case let .Error(error): print("Failuer ... \(error)")}
上面的使用方式看起来好奇怪。这个switch的执行结果是“Sunrise is at 6:00 am and sunset is at 8:09 pm”。当switch 后面是常量failure时,输出就是“Failuer … Out of cheese.” 。
case let .Result(sunrise,sunset)相当于case let ServerResponse.Result(sunrise,sunset),把ServerResponse省掉了,此处是构建一个Result case,let 使得参数sunrise和sunset从success这个case实例里获取附加数据。
- 结构
结构跟类一样,有属性有方法有构造方法。主要的区别是在赋值时结构是复制,而类是传引用,其余就是一点语法上无关紧要的小差别。比如:
struct Card { var rank = Rank.Queen let suit:Suit}var card = Card(rank:Rank.Ace,suit:Suit.Hearts)
上面的结构,没有为它创建构造方法。但它有默认的构造方法,类就不能这样做了。
上一篇:Swift快速入门之getter 和 setter
下一篇:Swift快速入门之协议与扩展
- Swift快速入门之枚举与结构
- iOS swift学习之入门详解(枚举和结构)
- Swift快速入门之分支与循环
- Swift快速入门之协议与扩展
- Swift之旅(五)枚举与结构体
- swift入门 枚举和结构体
- 枚举与结构体入门
- Swift快速入门之可选类型与错误处理
- Swift快速入门之延迟调用与范型
- Swift快速入门之函数
- C# 之 枚举与结构
- C#之结构与枚举
- Swift之高级运算符与枚举
- c++之枚举 快速入门及使用
- Swift快速入门之开始吧
- Swift快速入门之对象和类
- Swift快速入门之getter 和 setter
- Swift快速入门之getter 和 setter
- 图像去噪
- iOS基础-属性与成员变量的区别
- 纯CSS下的loading贰
- 易學原論 (4288_4)
- 220. Contains Duplicate III
- Swift快速入门之枚举与结构
- 数据结构1
- css的继承
- Java并发编程 ExecutorService Future FutureTask Callbale的使用
- ossec开源ids
- javascript入门(一)
- Unity学习笔记五 - Survival Shooter Tutorial
- Handler 引起的内存泄露
- javascript 学习(二) BOM & DOM