1. 定义及相关属性
定义:
enum:用于给定一个名称, 然后把每一种情况列举出来。在Swift语言中枚举类型的成员初始的时候不会被默认赋值成整数值,不同的枚举成员将要用什么类型以及赋值什么值都是可以自己控制的,可以在定义这个枚举的时候指定。相关属性:
1.成员值:成员的名字
2.原始值(rawValue):成员的默认内容,类型为Int时默认从0开始,其后自动加1;类型String时,成员的原始值 默认为 成员值。
另:没有定义成员类型值,则没有原始值rawValue属性。原始值赋值后不可更改。
3.哈希值(hashValue):成员的索引,从0开始
例:
//注意:与C或者Objective-C不同的是,在Swift语言中枚举类型的成员初始的时候不会被默认赋值成整数值,在Weather这个例子中,sunny, cloudy,等成员默认不会隐式的等于0,1,...。取而代之的是不同的枚举成员将要用什么类型以及赋值什么值都是可以自己控制的,可以在定义Weather这个枚举的时候指定.
enum Weather {
case sunny //成员值
case cloudy
case North, South, East, West //多个成员还可以用一行来定义,他们之间用逗号分割:
}
let EastOrder = Weather.East.hashValue //没有定义成员类型值,则没有原始值rawValue属性
//设置默认值,类型为Int时默认从0开始,其后自动加1
enum Planet: Int {
case Mercury = 1 //原始值为1,不设值则默认从0开始
case Venus, Earth, Mars = 10, Jupiter, Saturn, Uranus, Neptune
}
//由成员值获得哈希值hashValue和原始值rawValue
let earthsOrder = Planet.Earth.hashValue //2
let earthsOrder1 = Planet.Earth.rawValue //3
let earthsOrder2 = Planet.Jupiter.hashValue //4
let earthsOrder3 = Planet.Jupiter.rawValue //11
//由原始值rawValue获取成员值
let month = Planet(rawValue: 3) //Earth
let month1 = Planet(rawValue: 4) //没有则为nil
//设置默认值,类型String时,成员的默认值 默认为 成员值
enum Planet1: String {
case Mercury = "hello", Venus, Earth, Mars
}
let earthsOrder11 = Planet1.Earth.hashValue //2
let earthsOrder12 = Planet1.Earth.rawValue //"Earth"
let earthsOrder13 = Planet1.Mercury.hashValue //0
let earthsOrder14 = Planet1.Mercury.rawValue //String
//由原始值rawValue获取成员值
let month2 = Planet1(rawValue: "Earth") //Earth
使用方法:
//使用:点语法
Weather.cloudy //cloudy
//一旦todayweather被声明成是Weather类型,那么你就可以简短的使用逗号表达式来给它赋值成其他的Weather当中的值了
var todayweather = Weather.cloudy //cloudy
todayweather = .sunny //sunny
//与switch配合使用。如果变量是枚举值,可省略枚举名
//switch语句被用到判断枚举值的时候,必须要包括所有的枚举成员。default表示其他没有明确处理的成员
switch todayweather {
case .cloudy:
print("今天天气多云")
case .sunny:
print("天气晴朗") //"天气晴朗\n"
default:
print("天气状况未知")
}
//附加值: 每一种类型都可附加一个或多个值,形式是元组。例:case 类型(Int,String,...)
enum 精确天气 {
case 晴(Int, Int, String)
case 霾(String, Int)
}
//赋予附加值:加上元组字面量.
let 上海今日精确天气 = 精确天气.霾("PM10", 100)
let 北京今日精确天气 = 精确天气.晴(30, 50, "湛蓝")
//取得附加值:用switch语句, 在case中加上元组变量.
switch 北京今日精确天气 {
case .晴(let uvi, let li, let desc):
print("紫外线指数:",uvi,"晾晒指数:", li, "天蓝程度:", desc) //"紫外线指数: 30 晾晒指数: 50 天蓝程度: 湛蓝\n"
case .霾(let cat, let index):
print("雾霾颗粒类别:", cat, "指数:", index)
}
结构体/枚举实例默认不可改变属性值. 若需要修改,须加上mutating关键字.
enum 猜拳 {
case 石头,剪刀,布
static let game = "猜拳"
//结构体/枚举实例默认不可改变属性值. 若需要修改,须加上mutating关键字.
mutating func 开始() {
print("我出的是\(self)")
switch self {
case .剪刀 :
self = 猜拳.石头
case .石头:
self = 猜拳.布
case .布:
self = 猜拳.剪刀
}
}
}
var 小波 = 猜拳.剪刀//剪刀
//改变猜拳
小波.开始()
print(小波)//石头
参考自
SwiftV课堂视频源码
http://c.biancheng.net/cpp/html/2426.html