0112 - 중첩타입
오늘!
30개 프로젝트로 배우는 iOS 앱개발 을 결제했다..! 개념적인 부분 강의도 얼른 완강하고, 앱 만드는 강의도 완강함과 동시에!
야곰 아카데미 에서 했던 프로젝트를 다시 할 계획을 세웠다.
예를 들어 앨런 강의 1챕터, 패캠 1챕터 병행 이런식..?
이번주까진 살짝 바쁠것 같은데 노력해보겠다(ㅋㅎ;)
잘 할 수 있겠지..? 해야만 한다 ㅠㅠ..................................
중첩 타입을 공부했다.
예를 들어
class Aclass {
struct Bstruct {
enum Cenum {
case aCase // 열거형에는 케이스 필요
case bCase
struct Dstruct {
}
}
var name: Cenum
}
}
// 타입 선언과 인스턴스의 생성
let aClass: Aclass = Aclass()
let bStruct: Aclass.Bstruct = Aclass.Bstruct(name: .bCase)
let cEnum: Aclass.Bstruct.Cenum = Aclass.Bstruct.Cenum.aCase // 열거형은 케이스선택
let dStruct: Aclass.Bstruct.Cenum.Dstruct = Aclass.Bstruct.Cenum.Dstruct()
Aclass
안에 Bstruct
가 있으며, Bstruct
안에는 Cenum
구조체 Dstruct
가 있네요?
되게 복잡하다 싶을텐데.. 타입 간의 연관성을 명확히 구분하고, 내부 구조를 디테일하게 설계하기 위해 중첩 타입을 사용합니다!
되게 Swift 공식 문서에 좋은 예제가 있다. 갖고와봄!
struct BlackjackCard {
// 중첩으로 선언 타입 ==============================================
// Suit(세트) 열거형
enum Suit: Character { // 원시값(rawValue)사용
case spades = "♠", hearts = "♡", diamonds = "♢", clubs = "♣"
}
// 순서(숫자) 열거형
enum Rank: Int { // 원시값(rawValue)사용
case two = 2, three, four, five, six, seven, eight, nine, ten
case jack, queen, king, ace // (원시값 존재하지만 사용하지 않고자 함 ===> values)
// Values 타입정의 (두개의 값을 사용) //===> 열거형 값(순서)을 이용 새로운 타입을 반환하기 위함
struct Values {
let first: Int, second: Int?
}
// (읽기) 계산 속성 (열거형 내부에 저장 속성은 선언 불가)
var values: Values {
switch self {
case Rank.ace:
return Values(first: 1, second: 11) // 에이스 카드는 1 또는 11 로 쓰임
case .jack, .queen, .king:
return Values(first: 10, second: nil) // 10으로 쓰임
default:
return Values(first: self.rawValue, second: nil) // 2 ~ 10까지의 카드는 원시값으로 쓰임
}
}
}
// 블랙잭 카드 속성 / 메서드 =======================================
// 어떤 카드도, 순서(숫자)와 세트(Suit)를 가짐
let rank: Rank, suit: Suit
// (읽기) 계산속성
var description: String {
get {
var output = "\(suit.rawValue) 세트,"
output += " 숫자 \(rank.values.first)"
if let second = rank.values.second { // 두번째 값이 있다면 (ace만 있음)
output += " 또는 \(second)"
}
return output
}
}
}
// A - 스페이드
let card1 = BlackjackCard(rank: .ace, suit: .spades)
print("1번 카드: \(card1.description)")
// 5 - 다이아몬드
let card2 = BlackjackCard(rank: .five, suit: .diamonds)
print("2번 카드: \(card2.description)")
// 정의한 타입을 외부에서 사용하기 위해서는 중첩되어 있는 타입도 붙여야함(강제) ====> 훨씬 명확해짐
let heartsSymbol: Character = BlackjackCard.Suit.hearts.rawValue
let suit = BlackjackCard.Suit.hearts
이런 식으로 중첩타입을 구현할 수 있겠죠?
학습 키워드
- 중첩타입
문제점 / 고민한 점
- 예제를 찾다보니.. 채팅 메신저 예시를 봐서..! 이건 직접 구현해보기!
TIL 시리즈는 막연히 제가 배운 걸 기록하는 공간입니다.
Author And Source
이 문제에 관하여(0112 - 중첩타입), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@ian/TIL-0112저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)