swift基礎(chǔ)—枚舉和結(jié)構(gòu)體(Enumerations and Structures)

使用"enum"來(lái)創(chuàng)建一個(gè)枚舉栏渺。就像類和其他所有命名類型一樣,枚舉可以包含方法膀捷。

enum Rank: Int {

? case Ace = 1

? case Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten

? case Jack, Queen, King

? func simpleDescription() -> String {

? ? switch self {

? ? case .Ace:

? ? ? return "ace"

? ? case .Jack:

? ? ? return "jack"

? ? case .Queen:

? ? ? return "queen"

? ? case .King:

? ? ? return "king"

? ? default:

? ? ? return String(self.rawValue)

? ? }

? }

}

let ace = Rank.Ace

let aceRawValue = ace.rawValue

默認(rèn)情況下迈嘹,Swift 按照從"0"開始每次加"1"的方式為原始值進(jìn)行賦值,不過(guò)你可以通過(guò)顯式賦值進(jìn)行改變全庸。在上面的例子中秀仲,"Ace"被顯式賦值為"1",并且剩下的原始值會(huì)按照順序賦值壶笼。你也可以使用字符串或者浮點(diǎn)數(shù)作為枚舉的原始值神僵。使用"rawValue"屬性來(lái)訪問(wèn)一個(gè)枚舉成員的原始值。

使用“init?(rawValue:)”初始化構(gòu)造器在原始值和枚舉值之間進(jìn)行轉(zhuǎn)換覆劈。

if let convertedRank = Rank(rawValue: 3) {

? let threeDescription = convertedRank.simpleDescription()

}

枚舉的成員值是實(shí)際值保礼,并不是原始值的另一種表達(dá)方法。實(shí)際上责语,如果沒(méi)有比較有意義的原始值炮障,你就不需要提供原始值。

enum Suit {

? case Spades, Hearts, Diamonds, Clubs

? func simpleDescription() -> String {

? ? switch self {

? ? case .Spades:

? ? ? return "spades"

? ? case .Hearts:

? ? ? return "hearts"

? ? case .Diamonds:

? ? ? return "diamonds"

? ? case .Clubs:

? ? ? return "clubs"

? ? }

? }

}

let hearts = Suit.Hearts

let heartsDescription = hearts.simpleDescription()

注意坤候,有兩種方式可以引用“Hearts”成員:給“hearts”常量賦值時(shí)胁赢,枚舉成員“Suit.Hearts”需要用全名來(lái)引用,因?yàn)槌A繘](méi)有顯式指定類型白筹。在“switch”里智末,枚舉成員使用縮寫“.Hearts”來(lái)引用,因?yàn)椤皊elf”的值已經(jīng)知道是一個(gè)“suit”徒河。已知變量類型的情況下你可以使用縮寫系馆。

一個(gè)枚舉成員的實(shí)例可以有實(shí)例值。相同枚舉成員的實(shí)例可以有不同的值顽照。創(chuàng)建實(shí)例的時(shí)候傳入值即可由蘑。實(shí)例值和原始值是不同的:枚舉成員的原始值對(duì)于所有實(shí)例都是相同的,而且你是在定義枚舉的時(shí)候設(shè)置原始值代兵。

例如纵穿,考慮從服務(wù)器獲取日出和日落的時(shí)間。服務(wù)器會(huì)返回正常結(jié)果或者錯(cuò)誤信息奢人。

enum ServerResponse {

? case Result(String, String)

? case Failure(String)

}

let success = ServerResponse.Result("6:00 am", "8:09 pm")

let failure = ServerResponse.Failure("Out of cheese.")

switch success {

case let .Result(sunrise, sunset):

? let serverResponse = "Sunrise is at \(sunrise) and sunset is at \(sunset)."

case let .Failure(message):

? print("Failure...? \(message)")

}

注意日升和日落時(shí)間是如何從“ServerResponse”中提取到并與“switch”的“case”相匹配的谓媒。

使用“struct”來(lái)創(chuàng)建一個(gè)結(jié)構(gòu)體。結(jié)構(gòu)體和類有很多相同的地方何乎,比如方法和構(gòu)造器句惯。它們之間最大的一個(gè)區(qū)別就是結(jié)構(gòu)體是傳值土辩,類是傳引用。

struct Card {

? var rank: Rank

? var suit: Suit

? func simpleDescription() -> String {

? ? return "The \(rank.simpleDescription()) of \(suit.simpleDescription())"

? }

}

let threeOfSpades = Card(rank: .Three, suit: .Spades)

let threeOfSpadesDescription = threeOfSpades.simpleDescription()

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末抢野,一起剝皮案震驚了整個(gè)濱河市拷淘,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌指孤,老刑警劉巖启涯,帶你破解...
    沈念sama閱讀 206,602評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異恃轩,居然都是意外死亡结洼,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門叉跛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)松忍,“玉大人,你說(shuō)我怎么就攤上這事筷厘∶停” “怎么了?”我有些...
    開封第一講書人閱讀 152,878評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵酥艳,是天一觀的道長(zhǎng)摊溶。 經(jīng)常有香客問(wèn)我,道長(zhǎng)充石,這世上最難降的妖魔是什么莫换? 我笑而不...
    開封第一講書人閱讀 55,306評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮赫冬,結(jié)果婚禮上浓镜,老公的妹妹穿的比我還像新娘溃列。我一直安慰自己劲厌,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,330評(píng)論 5 373
  • 文/花漫 我一把揭開白布听隐。 她就那樣靜靜地躺著补鼻,像睡著了一般。 火紅的嫁衣襯著肌膚如雪雅任。 梳的紋絲不亂的頭發(fā)上风范,一...
    開封第一講書人閱讀 49,071評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音沪么,去河邊找鬼硼婿。 笑死,一個(gè)胖子當(dāng)著我的面吹牛禽车,可吹牛的內(nèi)容都是我干的寇漫。 我是一名探鬼主播刊殉,決...
    沈念sama閱讀 38,382評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼州胳!你這毒婦竟也來(lái)了记焊?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,006評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤栓撞,失蹤者是張志新(化名)和其女友劉穎遍膜,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體瓤湘,經(jīng)...
    沈念sama閱讀 43,512評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡瓢颅,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,965評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了岭粤。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片惜索。...
    茶點(diǎn)故事閱讀 38,094評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖剃浇,靈堂內(nèi)的尸體忽然破棺而出巾兆,到底是詐尸還是另有隱情,我是刑警寧澤虎囚,帶...
    沈念sama閱讀 33,732評(píng)論 4 323
  • 正文 年R本政府宣布角塑,位于F島的核電站,受9級(jí)特大地震影響淘讥,放射性物質(zhì)發(fā)生泄漏圃伶。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,283評(píng)論 3 307
  • 文/蒙蒙 一蒲列、第九天 我趴在偏房一處隱蔽的房頂上張望窒朋。 院中可真熱鬧,春花似錦蝗岖、人聲如沸侥猩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)欺劳。三九已至,卻和暖如春铅鲤,著一層夾襖步出監(jiān)牢的瞬間划提,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工邢享, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留鹏往,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,536評(píng)論 2 354
  • 正文 我出身青樓骇塘,卻偏偏與公主長(zhǎng)得像伊履,于是被迫代替她去往敵國(guó)和親袜漩。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,828評(píng)論 2 345

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

  • Enumerations and Structures github:Swift基礎(chǔ)實(shí)例github:SwiftB...
    廚子閱讀 414評(píng)論 0 2
  • 132.轉(zhuǎn)換錯(cuò)誤成可選值 通過(guò)轉(zhuǎn)換錯(cuò)誤成一個(gè)可選值,你可以使用 try? 來(lái)處理錯(cuò)誤湾碎。當(dāng)執(zhí)行try?表達(dá)式時(shí),如果...
    無(wú)灃閱讀 1,238評(píng)論 0 3
  • 本文寫于2014年6月宙攻,內(nèi)容短小精湛,通過(guò)簡(jiǎn)單的例子介褥,把Swift語(yǔ)言中幾個(gè)主要的點(diǎn)展現(xiàn)出來(lái)座掘,并配合一些簡(jiǎn)單的小練...
    Frederic曉代碼閱讀 2,066評(píng)論 0 1
  • 昨晚去看了最近口碑很好的電影《岡仁波齊》。這部由張揚(yáng)導(dǎo)演的小眾電影柔滔,能夠獲得較好的上座率以及9分以上的影迷評(píng)價(jià)溢陪,不...
    Herplus王瑩閱讀 125評(píng)論 0 0
  • 如何控制自己按照自己想做的事情去做,首先我想應(yīng)該就是應(yīng)該把要做的事情寫出來(lái)睛廊。然后按照計(jì)劃嚴(yán)格的執(zhí)行形真,首先想想我們會(huì)...
    張志鵬_7bba閱讀 156評(píng)論 0 0