//{
//? ? enum Direction {
//? ? ? ? case north
//? ? ? ? case south
//? ? ? ? case east
//? ? ? ? case west
//? ? }
//}
//等同上面的寫法
importFoundation
enum Direction {
? ? case north, south, east, west
}
vardir= Direction.north
dir= .east
print(dir)
//關(guān)聯(lián)值 將枚舉成員值和其他類型的值關(guān)聯(lián)在一起
enum Score {
? ? casepoints(Int)
? ? case grade(Character)
}
varscore= Score.points(10)
score= .grade("A")
switch score {
caselet.points(i):
? ? print("poits\(i)")
caselet.grade(i):
? ? print("grade\(i)")
}
enum Date {
? ? casedigit(year:Int, month:Int,day:Int)
? ? casestring(String)
}
vardate=Date.digit(year:2022, month:1, day:25)
date = .string("2022-1-25")
switch date {
case.digit(letyear,letmonth,letday):
? ? print(year,month,day)
caselet.string(value):
? ? print(value)
}
//原始值
enum PokerSuit : Character {
casespade ="??"
caseheart ="??"
casediamond ="??"
caseclub ="??"
}
varsuit= PokerSuit.heart
print(suit,suit.rawValue,PokerSuit.club.rawValue)
/*隱式原始值(int string 類型swift會(huì)自動(dòng)分配原始值)
?enum Direction : String{
?? ? case north = "north"
?? ? case south = "south"
?? ? case east = "east"
?? ? case west = "west"
?}
?//等同上面的寫法
?enum Direction : String{
?? ? case north, south, east, west
?}
?print(Direction.north)
?print(Direction.north.rawValue)
?*/
//遞歸枚舉 (常用)
indirect enum ArithExpr {
? ? casenumber(Int)
? ? casesum(ArithExpr,ArithExpr)
? ? casedifference(ArithExpr,ArithExpr)
}
//等同上面寫法
//enum ArithExpr {
//? ? case number(Int)
//? indirect case sum(ArithExpr,ArithExpr)
//? indirect case difference(ArithExpr,ArithExpr)
//}
letfive= ArithExpr.number(5)
letfour= ArithExpr.number(4)
letthree= ArithExpr.number(3)
letsum= ArithExpr.sum(five, four)
letdifference= ArithExpr.difference(three,sum)
funccalculate(_expr : ArithExpr) ->Int{
? ? switchexpr {
? ? caselet.number(value1):
? ? ? ? returnvalue1
? ? caselet.sum(left1, right1):
? ? ? ? returncalculate(left1) + calculate(right1)
? ? caselet.difference(left1, right1):
? ? ? ? returncalculate(left1) - calculate(right1)
? ? }
}
calculate(difference)
//MemoryLayout 獲取占用數(shù)據(jù)類型的內(nèi)存大小
enum Password {
? ? case number(Int,Int,Int,Int)
? ? caseother
}
MemoryLayout<Password>.size? ? //33 實(shí)際用到的空間大小 32(8*4)關(guān)聯(lián)值的內(nèi)存 + 1(枚舉的內(nèi)存)
MemoryLayout.stride? //40 分配占用的空間大小
MemoryLayout<Password>.alignment//8? 對(duì)齊參數(shù)
enum Season : Int{
? ? case spring = 8 ,summer, autumn
}
MemoryLayout.size? ? //1 實(shí)際用到的空間大小
MemoryLayout.stride? //1 分配占用的空間大小
MemoryLayout<Password>.alignment//1? 對(duì)齊參數(shù)
/*
?枚舉內(nèi)存
?結(jié)論:
?如果枚舉有關(guān)聯(lián)值 那么內(nèi)存就是關(guān)聯(lián)值占用內(nèi)存大小 + 枚舉內(nèi)存(1)
?如果枚舉是原始值或者普通枚舉 那么內(nèi)存都是 1
?*/