您的位置:首页 > 移动开发 > Swift

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

2014-06-08 15:16 323 查看

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.R
4000
esult("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中的值。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息