18. 중첩된 타입(nested type)

🌈 devleeky16498·2022년 4월 20일
0

열거형은 특정 클래스 또는 구조체의 기능 지원을 위해서 생성된다. 스위프트는 중첩된 타입을 정의할 수 있으며, 지원하는 타입의 정의 내에서 열거형, 클래스 그리고 구조체를 중첩할 수 있다.

중첩된 타입의 동작

  1. 아래의 예시 코드에서는 BlackjackCard라는 구조체를 정의하는데 이 구조체는 Suit와 Rank라는 2개의 중첩된 열거형을 포함한다.
struct BlackjackCard {
	//nested Suit enumeration
	enum Suit : Character {
    	case spades = "S", hearts = "H", diamonds = "D", clubs = "C"
    }
    //nsted 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)
            }
       }
       
 let rank : Rank, suit : Suit
 
 var description : String {
 	var output = "suit is \(suit.rawValue),"
    output += "value is \(rank.value.first)"
    if let second = rank.values.second {
    	output += "or \(second)"
    }
    return output
    }
}

let theAceOfSpades = BlackjackCard(rank : .ace, suit : .spades)
print(\(theAceOfSpades.description))
//다음과 같이 구조체 안에 값을 지정해주기 위한 열거형과 새로운 구조체를 다시 지정하여 자유롭게 반환값을 이용 가능하다.

중첩된 타입의 참조

  1. 정의된 컨텍스트 외부에서 중첩된 타입을 사용하기 위해서 해당 타입의 이름을 접두사로 붙인다.
let heartsSymbol = BlackjackCard.Suit.hearts.rawValue
//다음과 같이 입력하면 "heart"를 출력한다.
profile
Welcome to Growing iOS developer's Blog! Enjoy!🔥

0개의 댓글