Swift中文教程(六)--枚舉和結構

來源:互聯網
上載者:User

 

Enumerations 枚舉

 

使用 enum 來建立一個枚舉。跟Classes(類)和其他類型的命名方式一樣,枚舉也可以有Method(方法)。

 1 enum Rank: Int { 2     case Ace = 1 3     case Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten 4     case Jack, Queen, King 5     func simpleDescription() -> String { 6         switch self { 7         case .Ace: 8             return "ace" 9         case .Jack:10             return "jack"11         case .Queen:12             return "queen"13         case .King:14             return "king"15         default:16             return String(self.toRaw())17         }18     }19 }20 let ace = Rank.Ace21 let aceRawValue = ace.toRaw()

練習:

建立一個函數,通過原始值的類比來比較兩個rank的值。

在上例中,原始值的類型是 Int ,所以你可以只指定第一個原始值就可以了,因為後面的原始值都是按照順序賦值的。你還也可以使用字串或浮點數作為枚舉的原始值。

使用toRaw和fromRaw函數可以實現原始值和枚舉值間的轉換:

1 if let convertedRank = Rank.fromRaw(3) {2     let threeDescription = convertedRank.simpleDescription()3 }

枚舉出來的值就是實際值,而不是其他方式寫的原始值。(這句話的意思應該就是說枚舉值和原始值沒有必然的關聯性)為了防止枚舉無意義的原始值,你不需要特意提供一個原始值:

 1 enum Suit { 2     case Spades, Hearts, Diamonds, Clubs 3     func simpleDescription() -> String { 4         switch self { 5         case .Spades: 6             return "spades" 7         case .Hearts: 8             return "hearts" 9         case .Diamonds:10             return "diamonds"11         case .Clubs:12             return "clubs"13         }14     }15 }16 let hearts = Suit.Hearts17 let heartsDescription = hearts.simpleDescription()

練習:

給枚舉Suit建立一個名為color的方法,讓Spades和Clubs返回“black”,讓Hearts和Diamonds返回“red”。

請注意上例中引用hearts成員的兩種方式:當給常量hearts賦值時,Suit.Hearts是全名引用,因為此時的常量hearts沒有一個明確的類型。而在switch內部,枚舉通過縮減形式:.Hearts來引用,因為 self 的值對於枚舉成員是已知的。當值的類型已知時,你可以隨時使用縮減形式(去引用)。

 

Structures 結構

 

使用struct關鍵字建立來建立結構。結構體支援類(Classes)的許多行為:如,方法(methods)和構造器(initializers)。結構體與類最重要的區別是,在代碼中,結構體通過拷貝(copy)來實現值的傳遞,而類則是通過引用(reference):

1 struct Card {2     var rank: Rank3     var suit: Suit4     func simpleDescription() -> String {5         return "The \(rank.simpleDescription()) of \(suit.simpleDescription())"6     }7 }8 let threeOfSpades = Card(rank: .Three, suit: .Spades)9 let threeOfSpadesDescription = threeOfSpades.simpleDescription()

練習:

添加一個Card方法來建立一副紙牌,每一張牌都含有一個Rank和Suit的組合。

一個枚舉成員的執行個體可以擁有執行個體的值。相同枚舉成員的執行個體可以有不同的值。你在建立執行個體時可以給它指定一個值。指定值和原始值的區別在於:枚舉的原始值與所有執行個體相同,原始值是你在定義枚舉時提供的。

例如:有一個情境,需要你從伺服器中請求太陽升起和降落的時間,伺服器可以響應給你相應的資訊,也能給你返回錯誤的資訊:

 1 enum ServerResponse { 2     case Result(String, String) 3     case Error(String) 4 } 5   6 let success = ServerResponse.Result("6:00 am", "8:09 pm") 7 let failure = ServerResponse.Error("Out of cheese.") 8   9 switch success {10 case let .Result(sunrise, sunset):11     let serverResponse = "Sunrise is at \(sunrise) and sunset is at \(sunset)."12 case let .Error(error)://請求錯誤時返回的資訊--Joe.Huang13     let serverResponse = "Failure...  \(error)"14 }

練習:

在switch語句裡給ServerResponse添加第三種情況(case)。

請注意:(上例中)ServerResponse所返回的日出與日落時間是switch中所匹配的情況(case)。

 

謝謝,Swifter-QQ群:362232993,同好者進~ 

github地址:https://github.com/Joejo/Swift-lesson-for-chinese

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.