본문 바로가기

DEV/Swift

[Swift] enumerations (열거형)

복잡한 설명 다 빼고 열거형을 정의하라면?

"내가 커스텀한 데이터 타입"이라고 할 수 있겠다.

만약 SpecialDay라는 열거형을 내가 만들면, Int, String 등과 같은 데이터 타입으로 사용하는 것.

//여기서 SpecialDay는 Int와 같은 데이터 타입의 하나라고 보면 된다.
var num:Int = 0
var day:SpecialDay = SpecialDay.birth
/* Enumerations (열거형) */
//열거형은 연관된 값들을 묶어 타입-safe하게 사용하는데 목적이 있음
//C언어 열거형과의 차이점은 원시값(RawValue)를 주지 않아도 되며, 정수형에 한정되지 않는다는 것
//1-class Type으로 어디에서나 사용될 자격이 있음
//C언어보다 기능이 확장되어 프로퍼티, 메서드 등을 추가할 수 있음
//하나의 타입으로, 열거형 이름은 대문자로 시작함
enum Creature {
    //case를 통해 세부 항목들을 작성
    case animals
    case plants
}

//열거형으로 새로 제작된 타입은 기본 Int, String 등 처럼 데이터 타입으로 활용 가능
//고양이는 생물의 동물에 해당되는 데이터 타입으로 정함
var cat:Creature = Creature.animals
//오렌지는 생물의 식물에 해당되는 데이터 타입으로 정함
var orange:Creature = Creature.plants

//열거형은 switch-case문과 같이 사용이 되는 경우가 많음
switch orange {
case .plants:
    print("This is Plant.")
default:
    print("This is Animal")
}

//또는 뒤에 원시값 타입을 지정해 줄 수 있음
enum Animals:Int {
    case cat = 1    //이 경우 1이 원시값이 됨
    case dog = 2
    case donkey = 3
}

var myPet = Animals.dog
print("My pet's species is \(myPet) and rawValue is \(myPet.rawValue)")