열거라는 뜻을 가진 Enumeration에서 따온 용어
1월부터 12월까지를 enum
으로 한 번 정의한다면,
enum Month: Int {
case january = 1
case february
case march
case april
case may
case june
case july
case august
case september
case october
case november
case december
func simpleDescription() -> String {
switch self {
case .january:
return "1월"
case .february:
return "2월"
case .march:
return "3월"
case .april:
return "4월"
case .may:
return "5월"
case .june:
return "6월"
case .july:
return "7월"
case .august:
return "8월"
case .september:
return "9월"
case .october:
return "10월"
case .november:
return "11월"
case .december:
return "12월"
}
}
}
let december = Month.december
print(december.simpleDescription()) // 12월
print(december.rawValue) // 12
Month
는 Int
를 Raw Value(원시값)으로 가지도록 정의rawValue
속성이 바로 그 값을 나타냄반대로, 원시값을 가지고 Enum을 만들 수도 있음
let october = Month(rawValue: 10)
print(october) // Optional(Month.october)
Month(rawValue:)
의 반환값이 옵셔널인 이유:
Enum에서 정의되지 않은 원시값을 가지고 생성할 경우 nil
을 반환하기 때문
Month(rawValue: 13) // nil
일반적으로 Enum은 Int
만을 원시값으로 가질 수 있다고 생각합니다. 다른 프로그래밍 언어에서는 모두 그렇거든요. 하지만, Swift의 Enum은 조금 독특합니다. (독특한게 좀 많죠?) 아래 예시는 String
을 원시값으로 가지는 Enum입니다.
일반적으로 Enum은 Int만을 원시값으로 가질 수 있지만 Swift에서는 다름
아래는 String을 원시값으로 가지는 Enum
enum IssueState: String {
case open = "open"
case closed = "closed"
}