天天看點

Swift裡嵌套類型嵌套類型總結:

目錄

嵌套類型

嵌套類型實踐

引用嵌套類型

總結:

嵌套類型

枚舉常被用于為特定類或結構體實作某些功能。枚舉可以友善的定義工具類或結構體,進而為某個複雜的類型所使用。為了實作這種功能,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、嵌套類型引用。類似屬性的應用,用點操作符