IOS April 18, 2018

[Swift] 열거형 Enum 사용하기

Words count 3.4k Reading time 3 mins. Read count 0

스위프트의 Enum 기본

enum의 선언은 enum 키워드로 합니다.

enum Languaegs : String {
    case Korean = "KR"
    case Japanese = "JP"
}

위 예시 하나로도 Obj-C의 Enum과의 많은 차이점을 느낄 수 있습니다.

Enum에 String을 넣을 수 있다니!!
Obj-C 에서 Enum을 NSString에 매핑하기 위해 얼마나 많은 노오오력이 필요했던가!

사용 예시 1) 서버에서 String으로 내려준 “KR”를 num에 매핑하기

let language = Languages.init(rawValue: "KR")

끝. 참 쉽죠?

사용 예시 )Swift enum을 서버에 전달하기 위해 Serialize를 하기

let language = Languages.Korean
language.rawValue  //  "KR"

Switch 에서의 Enum

let language = Languages.Korean

switch language {
case .Korean:
    print("안녕하세요")
case .Japanese:
    print ("こんにちは。")
}

결과는 안녕하세요

Switch 또는 if 문에서 enum을 사용할 때 .Korean 처럼 enum 타입명을 앞에 붙이지 않아도 됩니다. 열거형의 이름은 스위프트의 타입 검사기가 자동으로 알아낼 수 있기 때문에 생략할 수 있습니다.

타입 이름이 긴 enum 의 경우에 유용합니다.

nested enum

enum 의 값으로 enum도 사용 가능합니다.

enum Computer {
    enum OS {
        case Windows
        case Linux
    }
    enum MadeBy {
        case Apple
        case Samsung
        case LG
    }
    case PowerButton
    case Monitor
}

Computer.OS.Windows
Computer.MakeBy.LG
Computer.PowerButton

위와 같은 예시로 사용 가능합니다.

enum의 메소드

기타 다른 언어와 마찬가지로 Swift 에서도 enum 에 개별 메소드 구현이 가능합니다.

enum Languaegs : String {
    case Korean = "KR"
    case Japanese = "JP"

    func hello() -> String {
        switch self:
            case .Korean return "안녕하세요"
            case .Japanese return "こんにちは。"
    }
}

let language.Korean.hello()

languages.Korean.hello() 의 결과는 “안녕하세요” 입니다.
메소드 내부에서는 switch 문에서 self 를 통해 적절한 분기처리를 해야합니다.

정적 메소드

enum 의 인스턴스 메소드 외에도 정적 메소드 구현이 가능합니다.

enum Languages : String {
    case Korean = "KR"
    case Japanese = "JP"

    func hello() -> String {
        switch self:
            case .Korean return "안녕하세요"
            case .Japanese return "こんにちは。"
    }
    static func fromType(type : String) -> Languages? {
        if type == "KR" {
            return .Korean
        }
        return .Japanese
    }
}

Languages.fromType("KR")

처럼 사용 가능하며 주로 enum을 생성할 때 rawValue로 정의되지 않은 값이 들어왔을 때 예외 처리를 위해 사용한다.

0%