Swift3.0-枚舉和結(jié)構(gòu)體

用enum 來創(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開始崭闲,下面的值依次增加,但是你也可以賦一個(gè)確切的值威蕉。在上面的例子中刁俭, Ace有一個(gè)確切的值是1,接下來的值就從1開始依次增加韧涨。你也可以用字符串或者浮點(diǎn)數(shù)字作為枚舉類型牍戚。用rawValue屬性去訪問一個(gè)枚舉成員的原始值。

使用init?(rawValue:)構(gòu)造器來從原始值中實(shí)例一個(gè)枚舉氓奈。值得一提的是原始值構(gòu)造器是一個(gè)可失敗的構(gòu)造器翘魄,因?yàn)閭魅氲脑贾翟诿杜e成員中有可能沒有,可以使用值綁定舀奶,如果初始化失敗則不走大括號(hào)的代碼暑竟。

if let convertedRank = Rank(rawValue:3)  {
         let threeDescription = convertedRank.simpleDescription()
}

枚舉的成員值是實(shí)際值,而不是原始值的另一種表達(dá)方式育勺。事實(shí)上但荤,如果枚舉成員沒有有意義的初始值,你也不必設(shè)定一個(gè)涧至。

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枚舉變量的兩種表達(dá)方式腹躁。當(dāng)給hearts常量賦值時(shí),使用Suit.hearts全稱南蓬,因?yàn)檫@時(shí)還沒有指定hearts常量的類型纺非。在switch里面使用.hearts是因?yàn)閟elf已經(jīng)指定了是Suit枚舉,所以可以省略枚舉名稱赘方。

相關(guān)值烧颖,枚舉也可以存儲(chǔ)任何類型的相關(guān)值,如果需要的話窄陡,每個(gè)成員的數(shù)據(jù)類型可以是不同的炕淮。

enum  Barcode {
      case UPCA(Int,Int,Int,Int)
      case QRCode(String)
}
var productBarcode = Barcode.UPCA(8,85909,51226,3)
productBarcode = .QRCode("ABCDEFG")

switch productBarcode {
   case .UPCA(let A, let B, let C, let D )
           print("\(A)\(B)\(C)\(D)")
   case .QRCode(let code)
           print("\(code)")
}

枚舉成員的值可以是這個(gè)枚舉的成員。相同的枚舉成員可以用不同的值跳夭。當(dāng)你創(chuàng)建的時(shí)候直接傳值即可涂圆。相關(guān)值和原始值是不同的:一個(gè)枚舉成員的對(duì)它的所有實(shí)例來說原始值都是相同的们镜,而且當(dāng)定義枚舉的時(shí)候是你提供原始值。比如润歉,考慮從一個(gè)服務(wù)器獲取日出和日落時(shí)間模狭。這個(gè)服務(wù)器會(huì)返回正常結(jié)果或者錯(cuò)誤結(jié)果。

enum ServerResponse {
      case   result (String, String)
      case   failure (String)
}

let success = ServerResponse.result("6:00 am", "8:09pm")
let failure = ServerResponse.failure("Out of cheese.")

switch success {
       case let .result(sunrise, sunset):
             print("Sunrise is at \(sunrise) and sunset is at \(sunset).")
       case let .failure(message) :
             print("Faiure...  \(message)")
}

swift使用struct 關(guān)鍵字創(chuàng)建一個(gè)結(jié)構(gòu)體踩衩。結(jié)構(gòu)體支持類的很多行為胞皱,包括方法和構(gòu)造器。結(jié)構(gòu)體和類最重要的區(qū)別是結(jié)構(gòu)體在傳遞時(shí)可以拷貝內(nèi)容是值類型九妈,但是類是引用類型。

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)離奇詭異又憨,居然都是意外死亡翠霍,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門蠢莺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來寒匙,“玉大人,你說我怎么就攤上這事躏将〕酰” “怎么了?”我有些...
    開封第一講書人閱讀 152,878評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵祸憋,是天一觀的道長(zhǎng)会宪。 經(jīng)常有香客問我,道長(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)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了窄俏?” 一聲冷哼從身側(cè)響起蹂匹,我...
    開封第一講書人閱讀 37,006評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎凹蜈,沒想到半個(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
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至轧膘,卻和暖如春钞螟,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背谎碍。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工鳞滨, 沒想到剛下飛機(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)容