Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 직장인인강
- 패캠챌린지
- TableView
- swift
- cancelAsyncWrite
- enum
- 열거형
- xcode
- RawValue
- beginAsyncWrite
- Optional Chaining
- 패스트캠퍼스
- 프로퍼티 관찰자
- Git
- SeSAC
- 30개프로젝트로배우는iOS앱개발withSwift초격자패키지Online
- userDefaults
- ios
- Background
- 기본문법
- 인스펙터
- Realm
- Threading
- 문자열 보간법
- 패스트캠퍼스후기
- switch
- 함수
- 독학
- 직장인자기계발
- 옵셔널 체이닝
Archives
- Today
- Total
아삭아삭 iOS 개발
[Swift 독학] 패스트캠퍼스 챌린지 31일차_열거형(1) 본문
열거형은 swift에서 강력한 기능 중 하나입니다.
오늘은 열거형의 정의와 활용법들에 대해 알아보겠습니다!
반응형
■ 열거형
- 연관성이 있는 값을 모아 놓은 것
→ 관련 값의 그룹으로 타입을 정의하고, 코드에서는 타입-세이프 방법으로 값을 동작 - enum 이라는 키워드 사용
→ 내부에는 case 키워드를 이용해 연관항목 나열 가능 - 열거형을 만들게 되면 하나의 새로운 타입처럼 사용할 수 있음
→ 열거형 이름 정의시 대문자 카멜케이스를 사용 - 열거형 내부 각각의 case 자체가 고유의 값임
→ 열거형내 case 정의시 소문자 카멜케이스를 사용 - 기존 구현을 넘어 기능적 확장도 가능,
표준 기능을 제공하기 위해 프로토콜 준수 또한 가능
enum 이름 {
case 이름1
case 이름2
case 이름3, 이름4, 이름5
…
}
// 열거형 정의 예시
enum Fruit: String {
case apple = "사과"
case orange = "오렌지"
case pear = "배"
case mango = "망고"
}
// 열거형 변수 생성
var fruit = Fruit.apple
// apple
fruit = .mango
// mango
■ 열거형의 다양한 활용방법 6가지 (1) ~ (3)
1) 열거형의 switch 구문 활용
- switch 구문으로 각 열거형 값들을 매칭시킬 수 있음
→ 변수에 들어있는 열거형의 항목이 어떠한 항목인지 비교할 수 있음 - 열거형 케이스를 고려시 switch구문은 완벽해야 함
→ 하나라도 case에 해당하지 않는 값이 있을 경우, default값을 설정해줘야 함
switch fruit {
case .apple:
print("사과는 아삭아삭")
case .orange:
print("오랜지는 상큼상큼")
case .pear:
print("배는 달달시원")
case .mango:
print("망고는 달콤시원")
}
// 망고는 달콤시원
let someFruitMarket = Fruit.pear
switch someFruitMarket {
case .pear:
print("[프리미엄] 산지직송 나주배 한박스에 8만원")
default:
print("싸다싸 오늘 마지막 이가격! 전부 한박스당 1만원/1kg!")
}
// [프리미엄] 산지직송 나주배 한박스에 8만원
2) 열거형의 케이스 반복
- 열거형의 모든 케이스를 수집하고자 할 경우 유용
- 열거형 이름 뒤에 : CaseIterable 키워드를 추가하여 사용
- allCases 프로퍼티를 사용하여 모든 케이스 수집 및 방출 가능
// 얼마나 많은 케이스가 존재하는지 계산해봄
enum Emotion: CaseIterable {
case calm, hopeful, defiant, prepared, chilln
}
let numberOfEmotions = Emotion.allCases.count
print("This robot can express \(numberOfEmotions) emotions through dance ")
// This robot can express 5 emotions through dance
// for-in 루프를 사용하여 모든 케이스를 반복
for emotion in Emotion.allCases {
print(emotion)
}
// calm
// hopeful
// defiant
// prepared
// chilln
3) 열거형의 연관값(associated values)
- 열거형내 항목은 자신과 연관된 값을 가질 수 있음
→ 열거형내 케이스 값과 함께 다른 타입의 값을 함께 저장 가능 - 연관값(해당 케이스)을 코드에서 값으로 사용시 매번 달라짐
- 연관값은 각 항목 옆에 소괄호로 묶어서 표현 가능
→ (연관값이 모두 상수나 변수로 추출될 경우) case 이름 앞에 각각 var, let으로 한번에 선언 가능
→ 소괄호안의 연관값을 초기화 시켜 줄 수 있음 - 다른 항목이 연관값을 갖는다고 모든 항목이 연관값을 가질 필요는 없음
- (연관값 포함한) 열거형 타입의 상수와 변수는 연관된 값으로 저장 가능하지만, 오직 하나의 값만 저장 가능
// 예를 들어, 한 지역의 주거현황으로 아파트가 있고 나머지는 곧 재건축이 들어간다고 가정
// 각 아파트단지의 세대수는 숫자형식, 나머지 재건축은 재건축 연합의 형태로 존재
enum ResidentialCondition {
case apartment(Int, Int, Int, Int)
case reconstruct(String)
}
// residentialcondition 이라는 새로운 변수 생성, 연관값인 (597, 1140, 55, 656)을 ResidentialCondition.apartment의 값으로 할당
var residentialcondition = ResidentialCondition.apartment(597, 1140, 55, 656)
residentialcondition = .reconstruct("모아타운")
// switch구문을 이용하여 관련값을 스위치 구문의 일부로 추출
switch residentialcondition {
case .apartment(let xi, let lottecastle, let prugio, let ipark):
print("Apartment: \(xi), \(lottecastle), \(prugio), \(ipark).")
case .reconstruct(let moatown):
print("Reconstruction: \(moatown).")
}
// Reconstruction: 모아타운.
switch residentialcondition {
case let .apartment(xi, lottecastle, prugio, ipark):
print("Apartment: \(xi), \(lottecastle), \(prugio), \(ipark)")
case var .reconstruct(moatown):
print("Reconstruction: \(moatown).")
}
// Reconstruction: 모아타운.
열거형에서의 원시값과 초기화, 재귀 열거형, 메서드 활용에 대해서는 다음편에서 정리해보겠습니다~
본 게시물은 개인 공부 기록용이므로 내용에 오류가 있을 수 있습니다.
■ fast campus강의 외 참조자료
[1] https://blog.yagom.net/553/
[2] https://bbiguduk.gitbook.io/swift/language-guide-1/enumerations
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.
'Swift' 카테고리의 다른 글
[Swift 독학] 패스트캠퍼스 챌린지 33일차_옵셔널 체이닝(1) (0) | 2022.02.25 |
---|---|
[Swift 독학] 패스트캠퍼스 챌린지 32일차_열거형(2) (0) | 2022.02.24 |
[Swift 독학] 패스트캠퍼스 챌린지 30일차_익스텐션 (0) | 2022.02.22 |
[Swift 독학] 패스트캠퍼스 챌린지 29일차_프로토콜 (0) | 2022.02.21 |
[Swift 독학] 패스트캠퍼스 챌린지 28일차_assert와 precondition과 guard (0) | 2022.02.20 |