본문 바로가기

App Dev/iOS

iOS Swift Enum 열거형은 어떻게 쓰는 걸까 ?

반응형

열거형은 관련된 값으로 이루어진 그룹을 공통의 형으로(type) 선언해 형 안전성(type-safety)을 보장하는 방법으로 코드를 다룰 수 있게 해줍니다. C나 Objective-C가 Integer값들로 열거형을 구성한 것에 반해 Swift에서는 case값이 string, character, integer, floting 값들을 사용할 수 있습니다. 열거형은 1급 클래스 형(first-class types)이어서 계산된 프로퍼티(computed properties)를 제공하거나 초기화를 지정하거나, 초기 선언을 확장해 사용할 수 있습니다.

 

쉽게 말해 변수를 선언하는데 변수 명이 겹쳐질 수도 있고 너무 많아져서 헷깔릴 수 있다.

그래서 좀 더 큰 틀을 잡아서 헷깔리지 않고 중복 되지 않게 사용할 수 있도록 

라벨을 붙여준다고 생각하면 된다.

[Enum 사용법]

enum School {
    case elementary
    case middle
    case high
}

각 case 별 선언해서 사용해도 되고 

enum School2 {
    case elementary , middle , high
}

이와 같이 한번에 작성해도 된다 . 

C나 Objective-C 와는 다르게 Swift에서 열거형은 생성될 때 각 case 별로 기본 integer값을 할당하지 않습니다. 위 Scholl를 예로 들면, elementary, middle,high 는 각각 암시적으로 0, 1, 2값을 갖지 않습니다. 대신 Swift에서 열거형의 각 case는 School으로 선언된 온전한 값입니다.

/// 상수 값 변경 x
let yourSchool = School.high

print("yourSchool : \(yourSchool)")

 

[결과] 

yourSchool : high

 

[값을 넣어주기]

enum Grade : Int {
    case first = 1
    case second = 2
    
}

let yourGrade = Grade.second

print("yourGrade : \(yourGrade)")

print("yourGrade : \(yourGrade.rawValue)")

 

[결과]

yourGrade : second
yourGrade : 2

rawValue = > 해당 가지고 있는 값을 출력한다. 

 

[함수 만들기]

num SchoolDetail {
    case elementary(name : String)
    case middle(name : String)
    case high(name : String)
    
    func getName() -> String {
        switch self {
        case.elementary(let name):
            return name
        case.middle(let name):
            return name
        case.high(let name):
            return name
        }
    }
    
    
}

let yourMiddleSchoolName = SchoolDetail.middle(name : "월성중학교")

print("yourMiddleSchoolName : ", yourMiddleSchoolName)
print("yourMiddleSchoolName : ", yourMiddleSchoolName.getName())

 

 

enum 안에 함수도 생성할 수 있습니다.  호출 시에 입력한 name 값만 반환하여 출력해줍니다. 

 

[결과]

yourMiddleSchoolName :  middle(name: "월성중학교")
yourMiddleSchoolName :  월성중학교
반응형