《swift2.0 官方教程中文版》 第2章-20嵌套类型

前端之家收集整理的这篇文章主要介绍了《swift2.0 官方教程中文版》 第2章-20嵌套类型前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。


import Foundation


/*嵌套类型实例***********************************************/


//下面这个例子定义了一个结构体 BlackjackCard (二十一点),用来模拟 BlackjackCard 中的扑克牌点数。jackCard 结构体包含2个嵌套定义的枚举类型 Suit Rank

struct BlackjackCard {

// 嵌套定义枚举类型Suit

enum Suit: Character {

case Spades = "1",Hearts = "2",Diamonds = "3",Clubs = "4"

}

// 嵌套定义枚举型Rank

enum Rank: Int {

case Two = 2,Three,Four,Five,Six,Seven,Eight,Nine,Ten

case Jack,Queen,King,Ace

struct Values {

let first: Int,second: Int?

}

var values: Values {

switch self {

case .Ace:

return Values(first: 1,second: 11)

case .Jack,.Queen,.King:

return Values(first: 10,second: nil)

default:

return Values(first: self.rawValue,second: nil)

}

}

}

// BlackjackCard属性方法

let rank: Rank,suit: Suit

var description: String {

var output = "suit is \(suit.rawValue),"

output += "value is \(rank.values.first)"

if let second = rank.values.second {

output += " or \(second)"

}

return output

}

}


//枚举型的 Suit 用来描述扑克牌的四种花色,并分别用一个 Character 类型的值代表花色符号。

//枚举型的 Rank 用来描述扑克牌从 Ace ~10,J,Q,K,13张牌,并分别用一个 Int 类型的值表示牌的面值。(这个 Int 类型的值不适用于 Ace,K 的牌)

let theAceOfSpades = BlackjackCard(rank: .Ace,suit: .Spades)

print("theAceOfSpades: \(theAceOfSpades.description)")

// 打印出 "theAceOfSpades: suit is ?,value is 1 or 11"


//尽管 Rank Suit 嵌套在 BlackjackCard ,但仍可被引用,所以在初始化实例时能够通过枚举类型中的成员 名称单独引用。在上面的例子中 description 性能正确得输出 Ace 牌有111两个值。




/*嵌套类型的引用***********************************************/

//在外部对嵌套类型的引用,以被嵌套类型的名字为前缀,加上所要引用的属性:

let heartsSymbol = BlackjackCard.Suit.Hearts.rawValue

print("heartsSymbol is \(heartsSymbol)")

// 红心的符号 "?"


//对于上面这个例子,这样可以使 Suit,Rank, Values 的名字尽可能的短,因为它们的名字会自然的由定义 它们的上下文来限定。

猜你在找的Swift相关文章