swift:Enumeration 枚舉

枚舉 rawValue indirect

//Enumerations  枚舉

//enumeration syntax  枚舉語法 枚舉的第一個單詞大寫
enum SomeEnumeration {
//enumeration definition goes here 枚舉的定義
}

//枚舉的case 在定義的時候沒初始值 這點是與OC 不同的地方  也就是說North不等于0 South不等于1 鼠次。粗悯。。
enum CompassPoint{
    case  North
    case South
    case East
    case West
}

//enumeration 的cases 在同一行的時候 用逗號隔開
enum Planet{
case Mercury, Venus, Earth, Mars, Jupiter , Saturn, Uranus, Neptune海王星
}

var directionTohead = CompassPoint.West
directionTohead = .West  //directionToHead 在初始化為CompassPoint的某個值時, 可是省略枚舉的名稱使用點語法

//通過switch語句來匹配枚舉的值  沒有其他情況的時候不需要使用default
switch directionTohead{
case .North:
    print("Lots of planets have a north")
case .South:
    print("Watch out fir penguins")
case .East:
    print("Where is sun rises")
case .West:
    print("Where the skies are blue")  //"Where the skies are blue\n"
}

//switch 使用default的時候
let somePlanet = Planet.Earth
switch somePlanet{
case .Earth:
    print("Mostly harmless") //"Mostly harmless\n"
default:
    print("Not a safe place for human")

}


//case后面沒有冒號的情況
enum Barcode{
case UPCA(Int, Int, Int, Int)//代表是 Barcode枚舉 可以拿到UPCA和type(Int, Int, Int, Int)結(jié)合的值 或者QRCode和string類型結(jié)合的值
    case QRCode(String)
}

var productBarcode = Barcode.UPCA(8, 85909, 51226, 3) //UPCA(8, 85909, 51226, 3)
productBarcode = .QRCode("ABCDEFGHIJKLMOP")//QRCode("ABCDEFGHIJKLMOP")


switch productBarcode {
case .UPCA(let numberSystem, let manufacturer, let product, let check):
    print("UPC-A: \(numberSystem), \(manufacturer), \(product), \(check).")
case .QRCode(let productCode):
    print("QR code: \(productCode).") //"QR code: ABCDEFGHIJKLMOP.\n"
}

//如果枚舉的cases 所有元素作為常量 或者全部的元素都是變量  那么可是在case的名字前有var或者let標(biāo)志
switch productBarcode {
case let .UPCA(numberSystem, manufacturer, product, check):
    print("UPC-A: \(numberSystem), \(manufacturer), \(product), \(check).")
case let .QRCode(productCode):
    print("QR code: \(productCode).")
}
// Prints "QR code: ABCDEFGHIJKLMNOP."


//Raw Values 給case的名稱賦初始值
enum ASCIIControlCharacter: Character{
case Tab = "\t"
    case LineFeed = "\n"
    case CarriageReturn  = "\r"

}
ASCIIControlCharacter.Tab.rawValue//"   "


enum Planets2: Int{
case Mercury = 1, Venus, Earth, Mars, Jupiter, Saturn, Uranus, Neptune //Planets2.Mercury有個明確的值是1悲立,那么Mercury.Earth有個隱式的值是2以此類推
}
Planets2.Earth.rawValue //3
Planets2.Mercury.rawValue//1

//枚舉是string類型的代表 case語句被賦了初始值
enum CompassPoint1: String {
    case North = "Northe", South, East, West
}
CompassPoint1.West.rawValue //"West"
CompassPoint1.North.rawValue //"Northe"

enum CompassPoint2: String {
    case North, South, East, West
}
CompassPoint2.West.rawValue //"West"
CompassPoint2.North.rawValue //"North"


//帶初始值初始化 initializing from a raw value
let possiblePlanet = Planets2(rawValue: 7) //Uranus  并不是所有的int值可以找到對應(yīng)的planet 所以raw value initializer總是返回一個可選的枚舉的case 所以 possiblePlanet 是Planets2?  或者是optional Planets2  如果rawVlaue: 11  那么Planets2(rawValue: 11) 返回的就是空nil

let positionToFind = 11
if let somePlanet = Planets2(rawValue: positionToFind) {
    switch somePlanet {
    case .Earth:
        print("Mostly harmless")
    default:
        print("Not a safe place for humans")
    }
} else {
    print("There isn't a planet at position \(positionToFind)")
}
// Prints "There isn't a planet at position 11"



//recursive Ennumerations  遞歸枚舉  indirect 間接的
enum ArithmeticExpression{
case Nunber(Int)
    indirect case Addition(ArithmeticExpression, ArithmeticExpression)
    indirect case Multiplication(ArithmeticExpression, ArithmeticExpression)

}

//如果所有的case語句需要indirect的話 也可以吧indirect 放在 枚舉的前面  enum的前面

indirect enum ArithmeticExpression1{
case Number(Int)
    case Addition(ArithmeticExpression1,ArithmeticExpression1)
    case  Mutiplication(ArithmeticExpression1, ArithmeticExpression1)

}

let thre = ArithmeticExpression1.Number(3)
let four = ArithmeticExpression1.Number(4)
let sum = ArithmeticExpression1.Addition(thre, four)
let product = ArithmeticExpression1.Mutiplication(thre, four)


func evaluate(expression: ArithmeticExpression1) -> Int {
    switch expression {
    case let .Number(value):
        return value
    case let .Addition(left, right):
        return evaluate(left) + evaluate(right)
    case let .Mutiplication(left, right):
        return evaluate(left) * evaluate(right)
    }
}

print(evaluate(product))
// Prints "12"







最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市捺球,隨后出現(xiàn)的幾起案子滑潘,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 223,207評論 6 521
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件眉踱,死亡現(xiàn)場離奇詭異挤忙,居然都是意外死亡,警方通過查閱死者的電腦和手機谈喳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,455評論 3 400
  • 文/潘曉璐 我一進店門册烈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人婿禽,你說我怎么就攤上這事赏僧。” “怎么了扭倾?”我有些...
    開封第一講書人閱讀 170,031評論 0 366
  • 文/不壞的土叔 我叫張陵淀零,是天一觀的道長。 經(jīng)常有香客問我吆录,道長窑滞,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,334評論 1 300
  • 正文 為了忘掉前任恢筝,我火速辦了婚禮哀卫,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘撬槽。我一直安慰自己此改,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 69,322評論 6 398
  • 文/花漫 我一把揭開白布侄柔。 她就那樣靜靜地躺著共啃,像睡著了一般。 火紅的嫁衣襯著肌膚如雪暂题。 梳的紋絲不亂的頭發(fā)上移剪,一...
    開封第一講書人閱讀 52,895評論 1 314
  • 那天,我揣著相機與錄音薪者,去河邊找鬼纵苛。 笑死,一個胖子當(dāng)著我的面吹牛言津,可吹牛的內(nèi)容都是我干的攻人。 我是一名探鬼主播,決...
    沈念sama閱讀 41,300評論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼悬槽,長吁一口氣:“原來是場噩夢啊……” “哼怀吻!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起初婆,我...
    開封第一講書人閱讀 40,264評論 0 277
  • 序言:老撾萬榮一對情侶失蹤蓬坡,失蹤者是張志新(化名)和其女友劉穎猿棉,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體渣窜,經(jīng)...
    沈念sama閱讀 46,784評論 1 321
  • 正文 獨居荒郊野嶺守林人離奇死亡铺根,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,870評論 3 343
  • 正文 我和宋清朗相戀三年宪躯,在試婚紗的時候發(fā)現(xiàn)自己被綠了乔宿。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,989評論 1 354
  • 序言:一個原本活蹦亂跳的男人離奇死亡访雪,死狀恐怖详瑞,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情臣缀,我是刑警寧澤坝橡,帶...
    沈念sama閱讀 36,649評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站精置,受9級特大地震影響计寇,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜脂倦,卻給世界環(huán)境...
    茶點故事閱讀 42,331評論 3 336
  • 文/蒙蒙 一番宁、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧赖阻,春花似錦蝶押、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,814評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至苇侵,卻和暖如春赶盔,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背榆浓。 一陣腳步聲響...
    開封第一講書人閱讀 33,940評論 1 275
  • 我被黑心中介騙來泰國打工于未, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人哀军。 一個月前我還...
    沈念sama閱讀 49,452評論 3 379
  • 正文 我出身青樓沉眶,卻偏偏與公主長得像,于是被迫代替她去往敵國和親杉适。 傳聞我的和親對象是個殘疾皇子谎倔,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,995評論 2 361

推薦閱讀更多精彩內(nèi)容