Nested Types

作者: 宋奕Ekis | 来源:发表于2021-08-24 09:51 被阅读0次

    We can define some types within other types, just like this:

    struct BlackjackCard {
    
        // nested Suit enumeration
        enum Suit: Character {
            case spades = "♠", hearts = "♡", diamonds = "♢", clubs = "♣"
        }
    
        // nested Rank enumeration
        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 properties and methods
        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
        }
    }
    

    this is called Nested Types, which can be used inner and even outer.

    But if we want to use it outside of its definition context, we need to prefix its name with the name of the type it’s nested within, just like this:

    let heartsSymbol = BlackjackCard.Suit.hearts.rawValue
    // heartsSymbol is "♡"
    

    Let’ think!

    相关文章

      网友评论

        本文标题:Nested Types

        本文链接:https://www.haomeiwen.com/subject/jjfdiltx.html