k-coding
Swift 열거형 ( enum ) 본문
Swift 열거형 ( enum )
열거형이란 같은 주제로 연관된 데이터들을 멤버로 구성하여 나타내는 자료형 이다.
enum의 기본 구조는 다음과 같다.
enum EnumName {
case name1
case name2
case name3, name4, name5
// ...
}
이렇게 case별로 정리한 열거형이 하나의 자료형이 된다.
Raw Value
raw value 한국어로 원시값이라는 이것은 enum내부에 독립적인 값을 저장하는것이다.
< Int >
enum EnumName: Int {
case name1 = 1 // 1
case name2 // 2
case name3 = 10 // 10
case name4 // 11
case name5 // 12
}
enum의 타입이 int이면 첫번째 case인 name1부터 1씩 증가된 값이 들어간다.
이때, name1에 값을 따로 지정해주지 않으면 0부터 시작한다.
case에 특정 값이 지정되었다면 다음 case는 이전 case의 값에서 +1을 한 값이 지정된다.
< Double, Float >
enum EnumName: Double {
case name1 = 1.0 // 1.0
case name2 = 2.0 // 2.0
case name3 = 3.0 // 3.0
case name4 = 4.0 // 4.0
case name5 // error
}
enum의 타입이 실수형으로 지정할 것 이라면 모든 case에 값을 다 부여해 주어야한다.
원시값은 이전case에서 +1을 한값을 현 case에 부여하는데 정수 + 실수라는 타입 에러가 발생하기 때문이다.
혹시 그래도 다 붙이기 귀찮다면
enum EnumName: Double {
case name1 = 1.0 // 1.0
case name2 = 2.0 // 2.0
case name3 = 3.0 // 3.0
case name4 = 4 // 4.0
case name5 // 5.0
}
다음과 같이 지정해주는 마지막 case를 Int형으로 선언하면 된다.
< Character >
enum EnumName: Character {
case name1 = "a" //a
case name2 = "b" //b
case name3 = "c" //c
case name4 = "d" //d
case name5 = "e" //e
}
enum의 타입이 character일 경우에는 하나도 빠짐없이 모든 case에 대한 원시값을 선언해주어야합니다.
< String >
enum EnumName: Character {
case name1 = "first" // first
case name2 // name2
case name3 = "third" // third
case name4 // name4
case name5 // name5
}
enum 타입이 string인 경우는 원시 값을 지정 안해주면 case의 이름과 동일한 원시 값이 자동으로 배정된다.
열거형 호출
enum EnumName: Character {
case name1 = "first" // first
case name2 // name2
case name3 = "third" // third
case name4 // name4
case name5 // name5
}
var player1: EnumName = .name1 // name1
var player2: EnumName = .name2 // name2
player1.rawValue // first
player2.rawValue // name2
원시값을 이용해 초기화
원시값을 통하여 초기화를 할 수 있다.
물론 원시값이 없는 case가 있을 수 있으모로, 기본적으로 옵셔널 타입이어야 한다.
enum EnumName: Character {
case name1 = "first" // first
case name2 // name2
case name3 = "third" // third
case name4 // name4
case name5 // name5
}
let player1: EnumName? = EnumName(rawValue :"first")
if let player2: EnumName? = EnumName(rawValue :"third") {
// ...
} else { // "third"라는 rawValue가 없을 때 즉, 값이 nil일 때
// ...
열거형과 메소드
enum( 열거형 ) 안에 메소드를 같이 넣을수 있다.
enum EnumName: Character {
case name1 = "first" // first
case name2 // name2
case name3 = "third" // third
case name4 // name4
case name5 // name5
func enumFunc() {
switch self{
//...
}
}
}
EnumName.name1.enumFunc()
'iOS > Swift 정리' 카테고리의 다른 글
Swift 프로토콜 (0) | 2021.10.15 |
---|---|
Swift 확장 ( extension ) (0) | 2021.10.15 |
Swift Optional ( 3 ) (0) | 2021.10.10 |
Swift Optional ( 2 ) (0) | 2021.10.10 |
Swift 함수 사용 (0) | 2021.10.07 |
Comments