{
// 枚舉的基本用法
enum PPFDirection {
case north
case south
case east
case west
}
enum PPFDirection2 {
case north,south,east,west
}
var dir = PPFDirection.west
dir = PPFDirection.east
dir = .east
print(dir)
switch dir {
case .north:
print(dir)
case .west,.east:
print(dir)
case .south:
print(dir)
}
//關(guān)聯(lián)值(Associated Values)
//有時將枚舉的成員值跟其他類型的值關(guān)聯(lián)存儲在一起滩援,會非常有用
enum Score {
case points(Int)
case grade(Character)
}
var score = Score.points(96)
score = .grade("A")
enum Date {
case digit(year: Int, month: Int, day: Int)
case string(String)
}
var date = Date.digit(year: 2011, month: 9, day: 10)
date = .string("2011-09-10")
switch date {
case.digit(year: 2011, month: 9, day: 10):
print("date")
case .digit(let year, let month, let day):
print(year, month, day)
case let .string(value):
print(value)
}
switch score {
case let .points(i):
print(i, "points")
case let .grade(i):
print("grade", i)
} // grade A
// n 必要時let也可以改為var
// 關(guān)聯(lián)值舉例 支持多種類型數(shù)據(jù)判斷
enum Password {
case number(Int, Int, Int, Int) // 數(shù)字組合
case gesture(String)// 手勢數(shù)字軌跡
}
var pwd = Password.number(3, 5, 7, 8)
pwd = .gesture("12369")
switch pwd {
case let .number(n1, n2, n3, n4):
print("number is ", n1, n2, n3, n4)
case let .gesture(str):
print("gesture is", str)
}
// 原始值(Raw Values)
// n 枚舉成員可以使用相同類型的默認(rèn)值預(yù)先對應(yīng)玩徊,這個默認(rèn)值叫做:原始值
enum PokerSuit : Character {
case spade = "?"
case heart = "?"
case diamond = "?"
case club = "?"
}
enum Grade : String {
case perfect = "A"
case great = "B"
case good = "C"
case bad = "D"
}
print(Grade.perfect.rawValue) // A
print(Grade.great.rawValue) // B
print(Grade.good.rawValue) // C
print(Grade.bad.rawValue) // D
let suit = PokerSuit.spade
print(suit) // spade
print(suit.rawValue) // ?
print(PokerSuit.club.rawValue) // ?
// 注意:原始值不占用枚舉變量的內(nèi)存
// 隱式原始值(Implicitly Assigned Raw Values)
// n 如果枚舉的原始值類型是Int恩袱、String,Swift會自動分配原始值
enum PPFDirection3 : String {
case north = "north"
case south = "south"
case east = "east"
case west = "west"
}
// 等價于
enum PPFDirection4 : String {
case north, south, east, west
}
print(PPFDirection3.north) // north
print(PPFDirection4.north.rawValue) // north
enum Season : Int {
case spring, summer, autumn, winter
}
print(Season.spring.rawValue) // 0
print(Season.summer.rawValue) // 1
print(Season.autumn.rawValue) // 2
print(Season.winter.rawValue) // 3
enum Season2 : Int {
case spring = 1, summer, autumn = 4, winter
}
print(Season2.spring.rawValue) // 1
print(Season2.summer.rawValue) // 2
print(Season2.autumn.rawValue) // 4
print(Season2.winter.rawValue) // 5
enum PPFWord : String {
case sdf = "a"
case cd
case c = "cc"
case sfsf
}
print(PPFWord.sdf.rawValue)
print(PPFWord.cd.rawValue)
print(PPFWord.c.rawValue)
print(PPFWord.sfsf.rawValue)
// 遞歸枚舉(Recursive Enumeration) //indirect 間接的
indirect enum ArithExpr {
case number(Int)
case sum(ArithExpr, ArithExpr)
case difference(ArithExpr, ArithExpr)
}
let dif = ArithExpr.difference(ArithExpr.sum(ArithExpr.number(1), ArithExpr.number(2)), ArithExpr.number(3))
print(dif)
func calculate(_ expr: ArithExpr) -> Int {
switch expr {
case let .number(value):
return value
case let .sum(left, right):
return calculate(left) + calculate(right)
case let .difference(left, right):
return calculate(left) - calculate(right)
}
}
enum ArithExpr2 {
case number(Int)
indirect case sum(ArithExpr2, ArithExpr2)
indirect case difference(ArithExpr2, ArithExpr2)
}
let five = ArithExpr.number(5)
let four = ArithExpr.number(4)
let two = ArithExpr.number(2)
let sum = ArithExpr.sum(five, four)
let difference = ArithExpr.difference(sum, two)
calculate(difference)
// n 可以使用MemoryLayout獲取數(shù)據(jù)類型占用的內(nèi)存大小
enum PPFPassword {
case number(Int, Int, Int, Int)
case other1(Int, Int, Int, Int,Int, Int, Int, Int)
}
MemoryLayout<PPFPassword>.stride // 40, 分配占用的空間大小
MemoryLayout<PPFPassword>.size // 33, 實際用到的空間大小
MemoryLayout<PPFPassword>.alignment // 8, 對齊參數(shù)
var pwd1 = PPFPassword.number(9, 8, 6, 4)
pwd1 = PPFPassword.other1(1,1,1,123213,1,123,312,13)
print(MemoryLayout.stride(ofValue: pwd1)) // 40
print(MemoryLayout.size(ofValue: pwd1)) // 33
print(MemoryLayout.alignment(ofValue: pwd1)) // 8
// 窺探內(nèi)存小工具 https://github.com/CoderMJLee/Mems
}
筆記04 swift 枚舉
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
- 文/潘曉璐 我一進(jìn)店門椎椰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來沾鳄,“玉大人,你說我怎么就攤上這事瓤的⊥碳撸” “怎么了?”我有些...
- 文/不壞的土叔 我叫張陵稽坤,是天一觀的道長医增。 經(jīng)常有香客問我,道長叶骨,這世上最難降的妖魔是什么? 我笑而不...
- 正文 為了忘掉前任天揖,我火速辦了婚禮跪帝,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘斑唬。我一直安慰自己黎泣,他們只是感情好,可當(dāng)我...
- 文/花漫 我一把揭開白布褐着。 她就那樣靜靜地躺著托呕,像睡著了一般频敛。 火紅的嫁衣襯著肌膚如雪馅扣。 梳的紋絲不亂的頭發(fā)上,一...
- 文/蒼蘭香墨 我猛地睜開眼狰住,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了催植?” 一聲冷哼從身側(cè)響起,我...
- 正文 年R本政府宣布师枣,位于F島的核電站萧落,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏找岖。R本人自食惡果不足惜陨倡,卻給世界環(huán)境...
- 文/蒙蒙 一兴革、第九天 我趴在偏房一處隱蔽的房頂上張望爹脾。 院中可真熱鬧,春花似錦灵妨、人聲如沸。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至藤为,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間分别,已是汗流浹背。 一陣腳步聲響...
推薦閱讀更多精彩內(nèi)容
- 判斷可選類型是否有值的過程叫做optional binding(類型綁定),也就是常說的解包漏隐,簡便方式有if le...
- 枚舉語法格式:enum SomeEnumeration{//枚舉定義放在這里}與C/OC不同取具,這里的枚舉成員被創(chuàng)建...
- 枚舉為一組相關(guān)的值定義了一個共同的類型暇检,使你可以在你的代碼中以類型安全的方式來使用這些值。 如果你熟悉 C 語言块仆,...
- 關(guān)鍵字inout 這個例子是在playground下寫的 inout這個形參接收的相當(dāng)于接收的是結(jié)構(gòu)體變量的地址,...
- Swift中文文檔連接 函數(shù)相關(guān) 可變形式參數(shù) 一個可變形式參數(shù)可以接受零或者多個特定類型的值脊岳。當(dāng)調(diào)用函數(shù)的時候你...