//swift语言中将结构体与枚举放在了面向对象的思想中因为枚举、结构体、类工作原理完全相同这三种面向对象的要素都可以定义属性、方法、下标、构造器、嵌套
//通常使用枚举定义常量当一个变量有多个值的使用我们可以将变量定义成枚举类型
//枚举、结构体定义的变量我们称其为实例类定义的变量我们称其为对象
1.枚举类型的定义格式
//枚举中一个case可以对应一个枚举值也可以一个case对应多个枚举值多个枚举值之间用逗号隔开
enum Season {
case Spring
case Summer
case Autumn
case Winter
}
enum WeekDay {
case Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday
}
var s = Season.Spring
print(s)
//[注意]swift语言中枚举没有默认常量值枚举值对应的常量必须手动设置
s = .Winter
print(s)
//[注意]枚举类型的变量类名明确或者能够推测出来赋值时可以直接通过.调到枚举值
//获取枚举变量对应的值最好使用switch语句判断
switchs {
case .Spring:
print("春天来了~")
case .Summer:
print("夏天到了~")
case .Autumn:
print("秋天近了~")
case .Winter:
print("冬天不远了")
}
//为枚举值添加常量值称为原始值rawValue
//枚举表示的常量值类型Int、Float、Double、String、Character
enum WeekDays: Int {
case Monday,Tuesday = 10,Wednesday,Thursday,Friday = -20,Saturday,Sunday
}
//枚举值的原始值是前一个原始值加1
var day = WeekDays.Saturday
print(day.rawValue)
print(day.hashValue)
//[注意]枚举值的原始值类型是数字类型那么原始值只能赋整数类型不能出现小数
//枚举值的原始值类型为字符串类型
//1.编译器默认字符串类型的原始值与枚举值同名
enum Sex: String {
case男
case女 = "nv"
case未知
}
var ss = Sex.女
print(ss.rawValue)
//2.枚举值原始值为字符类型
//编译器是不能推断字符类型枚举值的原始值必须手动全部赋值
enum SeasonAgain: Character {
case Spring = "C"
case Summer = "X"
case Autumn = "Q"
case Winter = "D"
}
var again = SeasonAgain.Summer
print(again.rawValue)
//通过原始值获取对应的枚举值
print(SeasonAgain(rawValue: "W"))
print(SeasonAgain(rawValue: "D")!)
2.枚举的关联值
//枚举不仅能够定义多个枚举值每个枚举值也可以携带多个多种类型的数据我们称枚举值携带的数据为关联值
//格式: case 枚举值(元组)
enum Trade {
case Buy(name: String,price: Double)
case Sell(name: String)
case Temp(String,String)
}
var tr = Trade.Buy(name: "Swift编程", price: 75.0)
//关联值不能通过标签或者下标直接获取
//如果想要获取关联值中的内容需要借助switch语句使用临时变量或者常量接收
func tradeAction(trade: Trade,name: String,price: Double){}
func tradeAction(trade: Trade){
switch trade {
case .Buy(let name123,let price123):
print(name123,price123)
case .Sell(let name):
print(name)
default:
break
}
}
tradeAction(tr)
3.枚举的嵌套
//enum Date {
//
// case yyyy
// case MM
// case dd
//}
//enum Timer {
// case Birthday(date: Date)
//}
enum Timer {
case yyyy
case MM
case dd
indirectcase Birthday(date: Timer)
}
var time = Timer.Birthday(date: Timer.yyyy)
switchtime {
case .Birthday(date: .yyyy):
print("表示的是出生年")
case .Birthday(date: .MM):
print("表示的是出生月")
case .Birthday(date: .dd):
print("表示的是出生日")
case .yyyy,.MM,.dd:
print("1234567890")
default:
break
}
var a = 10
var b = a
a = 20
print(b)
func swap(inout a: Int) {
a = 1000
print(a)
}
var m = 10
swap(&m)
print(m)