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

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.Ace
let 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.Hearts
let 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值