[Swift5] Nested Types

8808 단어 swiftswift
  • 다음은 Swift 5.6 Doc의 Nested Types 공부 내용을 정리했음을 밝힙니다.

Nested Types

복잡한 타입 내부에서 사용하는 목적으로 클래스나 구조체를 정의할 수 있다. nested 타입을 통해 다른 복잡한 타입 안에 사용할 열거형, 클래스, 구조체를 정의할 수 있다. nested 타입은 다른 타입 내부 안에 타입을 정의하면 된다.

실행 중인 Nested 타입

Blackjack 구조체 내부에 Suit, Rank 두 개의 열거체 타입이 정의되어 있다는 점에서 Nested다.

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
    }
}

let theAceOfSpades = BlackjackCard(rank: .ace, suit: .spades)
print("theAceOfSpades: \(theAceOfSpades.description)")
// Prints "theAceOfSpades: suit is ♠, value is 1 or 11"

theAceOfSpadesace, spades를 파라미터로 받은 블랙잭 결과를 보여준다. description 프로퍼티는 파라미터로 받은 값을 통해 연산 결과를 리턴하는 연산 프로퍼티로, BlackjackCard 내부에서 nested 형태로 선언한 열거체 케이스를 활용한다.

Nested 타입 참조

nested 타입을 선언한 컨텍스트 외부에서 사용하려면 nested된 타임을 선언한 가장 큰 컬렉션 타입부터 사용한다.

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

SuitBlackjackCard 안에 선언된 nested 타입이므로 BlackjackCard부터 사용해야 한다.

좋은 웹페이지 즐겨찾기