Apple Swift语言基础入门 —— Swift概览5

来源:互联网 发布:react.js angular.js 编辑:程序博客网 时间:2024/05/16 03:54

Swift概览5

                      根据苹果官方《The Swift Programming Language》

2.6 枚举和结构体

       使用 enum 创建枚举。像类和其他已命名类型,枚举也有与之关联的方法。本文注:下面 switch 后面的变量是 self,所以后面的 case 条件 前面有. 。表示Rank中的。

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:              //表示是self.Ace 也就是Rank中的Ace            return "ace"        case .Jack:            return "jack"        case .Queen:            return "queen"        case .King:            return "king"        default:            return String(self.toRaw())        }    }}let ace = Rank.Acelet aceRawValue = ace.toRaw()
       在上面的例子中,枚举的原始值类型是 Int 类型,所以你只需指定第一个原始值。剩下原始值会以次序分配(逐个加1)。你也可以使用字符串或者浮点型数字作为枚举的原始类型。

       使用 toRaw 和 fromRaw 函数进行原始值和枚举值之间的转换。

if let convertedRank = Rank.fromRaw(3) {    let threeDescription = convertedRank.simpleDescription()}
       枚举成员值是实际的值,不仅仅只是原始值的另外一种写法。事实上,在没有有意义的原始值的情况下,你不用提供一个有意义的。

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.Heartslet heartsDescription = hearts.simpleDescription()
       注意上面提及枚举成员 Hearts 的两种方式:当给 Hearts 常量(倒数第二行的)分配值的时候, 使用的是枚举成员 Hearts 的全名 Suit.Hearts,这是因为这个常量没有详细的类型说明。在switch中,枚举以缩写的格式 .Hearts 被引用,这是因为 self 的值已知为 Suit。你可以在值的类型已知的情况下任意使用缩写格式。

       使用 struct 创建一个结构体。结构体支持许多类的特性,像方法和初始化。结构体和类的一个重要区别就是,在代码中传来传去的时候,结构体是被复制,类是通过引用传递。

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()
       枚举成员的实例可以有值于之关联。同一个枚举成员的那些实例可以有不同的值于之关联。在创建实例时提供关联的值。关联的值和原始值时不同的:一个枚举的成员的原始值对它的全部实例来说都是一样的,在你定义枚举的时候你需提供那个原始值。

       例如,考虑从服务器上请求日出和日落时间的情况。服务器可以回应所需信息,也可以回应一些错误的信息。

enum ServerResponse {    case Result(String, String)    case Error(String)} let success = ServerResponse.Result("6:00 am", "8:09 pm")let failure = ServerResponse.Error("Out of cheese.") switch success {case let .Result(sunrise, sunset):    let serverResponse = "Sunrise is at \(sunrise) and sunset is at \(sunset)."case let .Error(error):    let serverResponse = "Failure...  \(error)"}
       注意如何从 ServerResponse 提取 日出和日落 时间作为匹配 switch 的case中的值。



0 0
原创粉丝点击