加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-14 01:30:50 所属栏目:百科 来源:网络整理
导读:import Foundation /* 嵌套类型实例 ***********************************************/ // 下面这个例子定义了一个结构体 BlackjackCard ( 二十一点 ), 用来模拟 BlackjackCard 中的扑克牌点数。 jackCard 结构体包含 2 个嵌套定义的枚举类型 Suit 和 Rank


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 的名字尽可能的短,因为它们的名字会自然的由定义 它们的上下文来限定。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读