Notice
Recent Posts
Recent Comments
Link
大器晩成
중첩된 타입 (Nested Types) 본문
- 열거형은 특정 클래스 도는 구조체의 기능을 지원하기 위해 생성됩니다. 유사하게 더 복잡한 타입의 컨텍스트 내에서 허용하기 위해 구조체와 일반적으로 특정 타입과 함께 사용되는 프로토콜을 정의하는 것이 편리할 수 있습니다. 스위프트는 중첩된 타입을 정의할 수 있으며, 타입의 정의 내에서 열거형, 구조체, 그리고 프로토콜과 같은 타입을 중첩할 수 있습니다.
class Week {
struct DayOfTheWeek {
enum Day {
case monday
case tuesday
case wednesday
case thursday
case friday
case saturday
case sunday
}
var day: Day
}
}
let monday = Week.DayOfTheWeek(day: .monday)
- Day는 요일과 관련 있기 때문에, 요일 구조체 안에 선언되어 있습니다.
- 특정 타입 내에서만 사용하기 위해서 사용합니다.
- 타입 간의 연관성을 명확히 구분하고, 내부 구조를 디테일하게 설계가 가능합니다.
- 실제 개발자가 사용하는 경우보다 애플 내부에 구현되어 있는 경우가 많습니다.
- ex. DataFormatter.Style.full
Apple 공식문서 예제
- 블랙잭은 카드 합이 21을 넘지 않으면서, 딜러보다 높은 점수를 만들면 이기는 카드 게임입니다
struct BlackjackCard {
// nested Suit enumeration
enum Suit: Character { // 원시값(rawValue)사용
case spades = "♠", hearts = "♡", diamonds = "♢", clubs = "♣"
}
// nested Rank enumeration
enum Rank: Int { // 원시값(rawValue)사용
case two = 2, three, four, five, six, seven, eight, nine, ten
case jack, queen, king, ace
//Values 타입을 정의 및 두개의 프로퍼티 사용
// 에이스는 1 또는 11을 의미하기 때문에, second가 존재
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 { // ace일 때만 실행
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"
https://bbiguduk.gitbook.io/swift/language-guide-1/nested-types
중첩된 타입 (Nested Types) | Swift
Last updated 12 months ago
bbiguduk.gitbook.io
중첩 타입을 사용하는 목적
- 중첩타입으로 선언된 API를 볼 줄 알면 좋다.
- DateFormatter.Style.full (중간 타입에 대문자가 나오면, 중첩타입입니다.) - 실제 앱을 만들 때 중첩 선언을 잘 활용해야 합니다. (타입 간의 관계 명확성)
- 하나의 타입의 내부 구조(계층 관계 등)를 디테일하게 설계가 가능합니다
728x90
'iOS > Swift 문법' 카테고리의 다른 글
self vs Self - [대문자 self] (0) | 2025.02.24 |
---|---|
self vs Self - [소문자 self] (0) | 2025.02.24 |
[프로토콜] 프로토콜의 확장 (Protocol Extensions) (0) | 2025.02.18 |
[프로토콜] 선택적 프로토콜 요구사항(Optional Protocol Requirements) (0) | 2025.02.18 |
[프로토콜] 프로토콜의 다중 상속 (0) | 2025.02.18 |