//swift語言中將結(jié)構(gòu)體與枚舉放在了面向?qū)ο蟮乃枷胫幸驗槊杜e拟逮、結(jié)構(gòu)體、類工作原理完全相同這三種面向?qū)ο蟮囊囟伎梢远x屬性巩剖、方法铝穷、下標(biāo)、構(gòu)造器佳魔、嵌套
//通常使用枚舉定義常量當(dāng)一個變量有多個值的使用我們可以將變量定義成枚舉類型
//枚舉曙聂、結(jié)構(gòu)體定義的變量我們稱其為實例類定義的變量我們稱其為對象
1.枚舉類型的定義格式
//枚舉中一個case可以對應(yīng)一個枚舉值也可以一個case對應(yīng)多個枚舉值多個枚舉值之間用逗號隔開
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語言中枚舉沒有默認(rèn)常量值枚舉值對應(yīng)的常量必須手動設(shè)置
s = .Winter
print(s)
//[注意]枚舉類型的變量類名明確或者能夠推測出來賦值時可以直接通過.調(diào)到枚舉值
//獲取枚舉變量對應(yīng)的值最好使用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)
//[注意]枚舉值的原始值類型是數(shù)字類型那么原始值只能賦整數(shù)類型不能出現(xiàn)小數(shù)
//枚舉值的原始值類型為字符串類型
//1.編譯器默認(rèn)字符串類型的原始值與枚舉值同名
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)
//通過原始值獲取對應(yīng)的枚舉值
print(SeasonAgain(rawValue: "W"))
print(SeasonAgain(rawValue: "D")!)
2.枚舉的關(guān)聯(lián)值
//枚舉不僅能夠定義多個枚舉值每個枚舉值也可以攜帶多個多種類型的數(shù)據(jù)我們稱枚舉值攜帶的數(shù)據(jù)為關(guān)聯(lián)值
//格式: 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)
//關(guān)聯(lián)值不能通過標(biāo)簽或者下標(biāo)直接獲取
//如果想要獲取關(guān)聯(lián)值中的內(nèi)容需要借助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)