GGURUPiOS

Swift 공식 문서 정리 - (20) Nested Types 본문

Swift/공식문서 정리 ( 문법 )

Swift 공식 문서 정리 - (20) Nested Types

꾸럽 2023. 5. 14. 15:38

Nested Types (중첩 타입)

열거형은 특정 구조체나 클래스의 기능을 처리하기 위해 자주 사용됨

이와 비슷하게 특정 문맥에서 좀 더 복잡한 타입을 위해 사용할 수 있는 유틸리티 클래스나 구조체를 정의 가능

스위프트에서는 이 기능을 위해 중첩타입을 지원 함.

중첩타입 ? → 열거형, 클랫, 구조체를 그 타입 안에서 다시 정의할 수 있음

struct BlackjackCard {

     // nested Suit enumeration
       // struct 안에 enum이 들어갈 수 있습니다.
     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 { // enum안에 struct가 들어가는 것도 가능합니다.
             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
     }
 }

예제를 보면 struct 안에 enum 이 포함되어있다. 이런식으로 중첩된 구조를 만들 수 있음

중첩 타입의 언급

중첩 타입을 선언 밖에서 사용하려면 선언된 곳의 시작부터 끝까지 적어줘야 함

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