目录
1.枚举的定义
枚举在C/C++/c#中,是一个被命名的整型常数的集合, 枚举在日常生活中很常见。
例如表示星期的SUNDAY, MONDAY, TUESDAY, WednESDAY, THURSDAY, FRIDAY,SATURDAY,就是一个枚举。
在 Swift 中,枚举类型是一等(first-class)类型。它们采用了很多在传统上只被类(class)所支持的特性,例如计算型属性(computed properties),用于提供枚举值的附加信息,实例方法(instance methods),用于提供和枚举值相关联的功能。枚举也可以定义构造函数(initializers)来提供一个初始值;可以在原始实现的基础上扩展它们的功能;还可以遵守协议(protocols)来提供标准的功能。
2.枚举的使用
使用enum关键词来创建枚举,并且把它们的整个定义放在一对大括号内
enum Direction {
case north
case South
case East
case West
}
//枚举也可以写成一行
enum Direction2 {
case north,South,East,West
}
枚举中定义的值(如 north,South,East和West)是这个枚举的成员值(或成员)。使用case关键字来定义一个新的枚举成员值。
与 C 和 Objective-C 不同,Swift 的枚举成员在被创建时不会被赋予一个默认的整型值。north,South,East和West不会被隐式地赋值为0,1,2和3。相反,这些枚举成员本身就是完备的值,这些值的类型是已经明确定义好的Direction类型。多个成员值可以出现在同一行上,用逗号隔开。
//声明一个枚举
var a = Direction.north
var a2 = Direction.West
a2 = .south//.south = Direction.south,a2肯定是Direction类型的
//枚举也可以这样写,明确规定a3就是Direction类型
var a3:Direction = .East
可以使用switch语句匹配单个枚举值:
var d4 = Direction.north
switch d4 {
case .north:
print("north")
case .south:
print("South")
case .East:
print("East")
default:
print("default")
}
3.枚举的原始值
OC
中枚举的本质就是整数,所以OC
中的枚举是有原始值的,默认是从0开始,而Swift
中的枚举默认是没有原始值的,但是可以在定义时告诉系统让枚举有原始值
//定义枚举类型为Int类型,默认从0开始,后面逐一加一(这就和C语言类似了)
enum Courses:Int {
case math = 1,English,Chinese
}
除了Int类型,Swift枚举更加强大,还可以定义为Double、String等
但是如果指定除Int的其他类型,需要给所有枚举值赋值
enum MathMethod: String {
case Add = "add"
case Sub = "sub"
case Mul = "mul"
case Div = "div"
}
enum Constants: Double {
case π = 3.14159
case e = 2.71828
case φ = 1.61803398874
case λ = 1.30357
}
4.枚举值和原始值之间的转化:
5.枚举的关联值
枚举的关联值是将额外信息,附加到枚举值中的一种方式。使用关联值,每一个枚举值就可以是在某种特定的情形下,关联特定的值。
比如在某超市,可能存在进货—“买”和售卖—“卖”两种不同的交易类型。除此之外每手交易还要制定明确的售卖商品名称和售卖的交易数量。
//定义一个交易枚举
enum Supermarket {
case Purchase(String, Int) //买,关联一个字符串和一个整形
case Sell(String, Int) //卖,关联一个字符串和一个整形
case SellGoods(String, Int, String) //每个枚举值的关联类型可以不一样
}
enum Trade {
case Purchase(product: String, amount: Int) //买,商品名称和交易数量
case Sell(product: String, amount: Int) //卖,关联商品名称和交易数量
}
创建一个枚举,关联某些值
var TradeBuy = Trade.Purchase(product: "可乐", amount: 1100)
var TradeBuy2 = Trade.Purchase(product: "面包", amount: 230)
var TradeSell = Trade.Sell(product: "牛奶", amount: 1500)
提取值的方式
//第一种方式提取关联值,利用switch语句提取关联值
switch(TradeBuy){
case .Purchase(let product, let amount):
print("Buy \(product) with \(amount) number")
case let .Sell(product, amount)://简化
print("Sell \(product) with \(amount) number")
}
//第二种方式提取关联值,使用模式匹配提取关联值
if case let Trade.Sell(product, amount) = TradeSell {
print("Sell \(amount) of \(product)")
}
6.枚举的属性
尽管增加一个存储属性到枚举中不被允许,但你依然能够创建计算属性和类型属性。当然,计算属性的内容都是建立在枚举值下或者枚举关联值得到的。
enum Person {
case birthday;
case height;
var age:Int {
return 18;
};
static let weight = 65
}
不能包含存储属性 会报错:Enums must not contain stored properties
7.枚举中包含方法
Swift中的枚举也可以包含方法,可以是实例方法也可以是静态方法
enum Person {
case birthday;
case height;
var age:Int {
return 18;
};
static let weight = 65
func myName() -> Void {
print("myName:zhangsan")
}
static func test() {
print("test")
}
}
let p = Person.height
let age = p.age
print("age:\(age)")
p.myName()
Person.test()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。