📖 enum이란
📌 enum (열거형)
같은 주제로 연관된 데이터들을 멤버로 구성하여 나타내는 자료형
💬 열거라는 뜻을 가진 Enumeration에서 따온 용어입니다. 한글로 번역할 때에는 열거형이라는 말을 많이 사용합니다.
📖 enum 정의하기
📌 값이 없는 경우
- 두 가지 표현 방법이 있다.
enum 명칭 { case n1, n2, n3 ... }
enum 명칭 { case n1, case n2, case n3 ... }
ex) 학교 - 초, 중, 고
enum School {
case elementary
case middle
case high
}
- 실제 사용 : . 을 붙혀서 사용
let yourSchool = School.high print("yourSchool: \(yourSchool)")
⭐️ 주의사항 : 변경되는 값(변수)은 var ↔️ 변경되지 않는 값(상수)은 let
Enum은 원시값을 가지지 않을 수도 있다. 원시값을 가져야 할 필요가 없다면 굳이 만들지 않아도 가능하다.
enum Spoon {
case dirt
case bronze
case silver
case gold
func simpleDescription() -> String {
switch self {
case .dirt:
return "흙수저"
case .bronze:
return "동수저"
case .silver:
return "은수저"
case .gold:
return "금수저"
}
}
}
Enum을 예측할 수 있다면 Enum의 이름을 생략할 수 있다. 그렇게 될 경우에는, 코드가 굉장히 간결해 질 수 있다.
let spoon: Spoon = .gold // 변수에 타입 어노테이션이 있기 때문에 생략 가능
func doSomething(with spoon: Spoon) {
// ...
}
doSomething(with: .silver) // 함수 정의에 타입 어노테이션이 있기 때문에 생략 가능
📌 값이 있는 경우
- case에 원시값을 지정(Raw value)하고 싶을 때, 총 3가지 자료형 활용 가능함
- 원시값Raw Value으로 가지도록 정의됨.
첫 번째 방법
enum 명칭 : 자료형 타입 { case n1 = 값 ... }
ex)
enum Grade : Int {
case first = 1
case second = 2
}
- 실제 사용
let yourGrade = Grade.second
print("yourGrade : \(yourGrade)")
>>> yourGrade : second
- case의 값만 데리고 오고 싶은 경우 : .rawValue
print("yourGrade : \(yourGrade.rawValue)")
>>> yourGrade : 2
두 번째 방법
enum 명칭 { case n1( 입력할 값은... : 자료형 ) ... }
ex)
enum SchoolDetail1 {
case elementary(name: String) // 데이터 지정
case middle(name: String)
case high(name: String)
}
- 실제 사용
let yourMiddleSchoolName = SchoolDetail1.middle(name: "코더중학교")
print("yourMiddleSchoolName: \(yourMiddleSchoolName)")
>>> yourMiddleSchoolName: middle(name: "코더중학교")
- case의 값만 데리고 오고 싶은 경우 : 메서드를 만든다
ex)
enum SchoolDetail {
case elementary(name: String)
case middle(name: String)
case high(name: String)
func getName() -> String { // 메서드 (함수)
switch self {
case .elementary(let name): // 1. 이렇게 쓰거나
return name
case let .middle(name): // 2. 이렇게 쓸 수도 있다
return name
case .high(let name):
return name
}
}
}
- 실제 사용
let yourMiddleSchoolName = SchoolDetail.middle(name: "코더중학교")
print("yourMiddleSchoolName: \(yourMiddleSchoolName.getName())")
>>> yourMiddleSchoolName: 코더중학교
https://devxoul.gitbooks.io/ios-with-swift-in-40-hours/content/Chapter-3/enums.html
참고자료
'IOS - Swift' 카테고리의 다른 글
Swift 기초문법 - Generic (0) | 2022.09.14 |
---|---|
Swift 기초문법- struct와 class의 차이 (0) | 2022.09.14 |
swift 기초문법 - 콜렉션과 foreach (0) | 2022.09.12 |
swift 기초문법 - 01. 조건문 (0) | 2022.09.12 |
Swift 기초문법 - 시작하기 (0) | 2022.09.12 |