본문 바로가기
Swift

[Swift] 열거형 (Enumeration)

by Sky Titan 2020. 12. 20.
728x90
스위프트 프로그래밍
국내도서
저자 : 야곰
출판 : 한빛미디어 2019.10.01
상세보기

열거형 (Enumeration)

  • 연관된 항목들을 묶어서 표현할 수 있는 타입
  • 스위프트에서는 다른 언어와 달리 각 열거형이 고유의 타입으로 인정된다.
  • 배열, 딕셔너리와 다르게 미리 정의해준 항목 값 외에는 추가, 수정 불가능
  • 원시 값 (Raw Value) : 정수, 실수, 문자 등의 각 항목에 부여하는 실제 값
  • 연관 값 (Associated Values) : 다른 언어에서 공용체라고 불리는 값의 묶음을 구현

 

열거형을 사용해야 할 경우

  1. 제한된 선택지를 주고 싶을 때
  2. 정해진 값 외에는 입력 받고 싶지 않을 때
  3. 예상된 입력 값이 한정되어 있을 때

 

1. 기본

  • enum 키워드로 선언
  • case 키워드로 항목 지정
import UIKit
import Foundation

enum Country {
    case Korea
    case Japan
    case China
    case America
    case Mexico
}

let myCountry : Country = .Korea
let friendCountry : Country = .America

print(myCountry)//Korea
print(friendCountry)//America

 

2. 원시 값 (Raw Value)

  • 선언한 열거형 이름 뒤에 타입을 선언해서 항목마다 원시 값 지정 가능
import UIKit
import Foundation

enum Country : Int {
    case Korea = 1
    case Japan = 2
    case China = 3
    case America = 4
    case Mexico = 5
}

let myCountry : Country = .Korea
let friendCountry : Country = .America

print(myCountry.rawValue)//1
print(friendCountry.rawValue)//4

 

3. 연관 값 (Associated Value)

  • 각 항목이 자신과 연관된 값을 가질 수 있다.
  • 각 항목 옆에 소괄호로 묶어서 표현
  • 모든 항목이 연관 값을 가질 필요는 없다.
import UIKit
import Foundation

enum Country {
    case Korea(city : String, startFrom : Int)
    case Japan
    case China
    case America
    case Mexico
}

let myCountry : Country = .Korea(city: "Seoul", startFrom: 1945)
print(myCountry)//Korea(city: "Seoul", startFrom: 1945)

 

4. 항목 순회

  • 열거형의 모든 케이스를 알아야할 때 사용
  • CaseIterable 프로토콜을 채택하면 열거형에 allCases라는 이름의 타입 프로퍼티가 생성되어 모든 케이스의 컬렉션을 생성해줌
import UIKit
import Foundation

enum Country : CaseIterable {
    case Korea
    case Japan
    case China
    case America
    case Mexico
}

let allCountry : [Country] = Country.allCases

print(allCountry)//[Country.Korea, Country.Japan, Country.China, Country.America, Country.Mexico]

 

5. 비교 가능한 열거형

  • Comparable 프로토콜을 준수하는 연관 값만 가지거나, 연관 값이 없는 열거형은 Comparable 프로토콜을 채택해서 각 케이스를 비교할 수 있다.
  • 앞에 위치한 케이스가 더 작은 값
import UIKit
import Foundation

enum Country : Comparable {
    case Korea
    case Japan
    case China
    case America
    case Mexico
}

var countries : [Country] = [.America, .Japan, .Korea, .China, .Mexico]
countries.sort()

print(countries)//[Country.Korea, Country.Japan, Country.China, Country.America, Country.Mexico]

 

728x90

'Swift' 카테고리의 다른 글

[Swift] 프로퍼티 (Property)  (0) 2020.12.26
[Swift] Extension  (0) 2020.12.26
[Swift] 컬렉션형  (0) 2020.12.20
[Swift] Tuple 튜플  (0) 2020.12.19
[Swift] 데이터 타입 고급  (0) 2020.12.19

댓글