//Swift 允许定义嵌套类型,在支持的类型中定义嵌套的枚举、类和结构体
//要在一个类型中嵌套另一个类型,将嵌套类型的定义写在其外部类型的{}内,而且可以根据需要定义多级嵌套。
//嵌套类型实践:
struct BlackjackCard { //结构体,用来模拟扑克牌点数
enum Suit: Character {//嵌套的 Suit 枚举 描述扑克的四种花色
case spades = "♠️", hearts = "💖", diamonds = "♦️", clubs = "♣️"
}
enum Rank: Int { //嵌套的 Rank 枚举 描述扑克从 ace ~10 以及 J、Q、K 这13种牌
case two = 2, three, four, five, six, seven, eight, nine, ten // 用int类型的原始值表示2~10的牌面值
case jack, queen, king, ace // ace牌可以表示 1 或者 11
struct Values { // 嵌套在Rank中的枚举
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.rawValue)"
output += "牌面值为: \(rank.values.first)"
if let second = rank.values.second{
output += " 或 \(second)"
}
return output
}
}
//没有自定义构造器的 结构体 ,有默认的成员构造器,可以用来初始化
let theAceOfSpades = BlackjackCard(rank: .ace, suit: .spades)
print("C------牌面描述为:\(theAceOfSpades.description)")
//引用嵌套类型
//在外部引用嵌套类型时,在嵌套类型的类型名前面加上其外部类型名作为前缀
let heartsSymbol = BlackjackCard.Suit.hearts.rawValue
print("C-----引用嵌套类型的值:\(heartsSymbol)")
网友评论