점점 어려워지는 것 같은데~~
값 하나하나 case에 써줘도 되지만 축약형으로 case 하나에 쉼표로 구분해서 작성해줘도 된다.
enum CompassPoint: String {
case north
case south
case east
case west
}
// 축약형
enum CompassPoint: String {
case north, south, east, west
}
switch/case문에서 먼저 direction을 선언해주고 case문에 .만 작성해도 enum의 case가 보이기 때문에 switch/case를 활용할 수도 있다.
enum CompassPoint: String {
case north, south, east, west
}
var direction = CompassPoint.east
direction = .west
switch direction {
case .north:
print("north")
case .west:
print("west")
case .south:
print("south")
case .east:
print("east")
}
// west
만약 내가 원시값으로 초기화 하고 싶다면 위에서 설명한 축약형이 아닌 풀어서 쓰는게 가독성이 좋아보인다.
enum CompassPoint: String {
case north = "북"
case south = "남"
case east = "동"
case west = "서"
}
보통 다른 프로그래밍 언어에선 Int형 타입만 원시값을 가질 수 있지만 swift에선 모든 타입에서 원시값을 가져올 수 있다.
추가로 rawValue로 가져올 수 있다.
enum CompassPoint: String {
case north = "북"
case south = "남"
case east = "동"
case west = "서"
}
var direction = CompassPoint.east
direction = .west
switch direction {
case .north:
print(direction.rawValue)
case .west:
print(direction.rawValue)
case .south:
print(direction.rawValue)
case .east:
print(direction.rawValue)
}
// 서
추가로 열거형을 반환하게 할 수도 있다. 방법은 열거형 인스턴스를 생성할 때 매개변수로 원시값을 넘겨주면 된다.
enum CompassPoint: String {
case north = "북"
case south = "남"
case east = "동"
case west = "서"
}
let direction2 = CompassPoint(rawValue: "남")
// south
열거형안에 항목이 자신과 연관된 값을 가질 수 있다는 뜻이다.
각 항목 옆에 소괄호로 묶어 사용할 수 있고 다른 항목이 연관값을 갖는다고 모든 값이 연관값을 가져야하는 것은 아니다.
enum PhoneError {
case unknown
case batteryLow(String)
}
좀 더 활용해보면
enum PhoneError {
case unknown
case batteryLow(String)
}
let error = PhoneError.batteryLow("배터리가 곧 방전됩니다.")
// batteryLow("베터리가 곧 방전됩니다.")
연관값을 추출하려면 if case 또는 switch문을 활용해야한다.
enum PhoneError {
case unknown
case batteryLow(String)
}
let error = PhoneError.batteryLow("배터리가 곧 방전됩니다.")
switch error {
case .batteryLow(let message):
print(message)
case .unknown:
print("알수없는 에러입니다.")
}
// 배터리가 곧 방전됩니다.
switch문을 활용해서 .batteryLow에 있는 메세지 값을 추출해서 사용할 수 있다.