目錄
嵌套類型
嵌套類型實踐
引用嵌套類型
總結:
嵌套類型
枚舉常被用于為特定類或結構體實作某些功能。枚舉可以友善的定義工具類或結構體,進而為某個複雜的類型所使用。為了實作這種功能,Swift 允許你定義嵌套類型,可以在支援的類型中定義嵌套的枚舉、類和結構體。
要在一個類型中嵌套另一個類型,将嵌套類型的定義寫在其外部類型的
{}
内,而且可以根據需要定義多級嵌套。
嵌套類型實踐
一個結構體
BlackjackCard
(二十一點),用來模拟
BlackjackCard
中的撲克牌點數。
BlackjackCard
結構體包含兩個嵌套定義的枚舉類型
Suit
和
Rank
。
struct BlackjackCard {
// 嵌套的 Suit 枚舉 花色?
enum Suit: Character {
case spades = "♠", hearts = "♡", diamonds = "♢", clubs = "♣"
}
// 嵌套的 Rank 枚舉 點數
enum Rank: Int {
case two = 2, three, four, five, six, seven, eight, nine, ten
case jack, queen, king, ace
struct Values { // Rank 枚舉在内部定義了一個嵌套結構體 Values
let first: Int, second: Int?
}
var values: Values { //定義了一個計算型屬性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 //結構體有兩個屬性——rank 與 suit
var description: String { //結構體的計算屬性。實作get
var output = "suit is \(suit.rawValue),"
output += " value is \(rank.values.first)"
if let second = rank.values.second {
output += " or \(second)"
}
return output
}
}
let aceOfSpades = BlackjackCard(rank: .ace, suit: .spades)
print("aceOfSpades description:\(aceOfSpades.description)")
列印: aceOfSpades description:suit is ♠, value is 1 or 11
引用嵌套類型
外部引用嵌套類型時,在嵌套類型的類型名前加上其外部類型的類型名作為字首:
let heartSymbol = BlackjackCard.Suit.hearts.rawValue
print("heartSymbol: \(heartSymbol)")
列印:heartSymbol: ♡
總結:
1、嵌套類型定義:類型中定義嵌套的枚舉、類和結構體。(類型可以是枚舉、類和結構體
2、因為結構體、枚舉、類都可以添加屬性。是以都有嵌套類型?
3、嵌套類型引用。類似屬性的應用,用點操作符