Enumerations 열거형
- 초기 케이스 값을 제공하기 위해 initializer를 정의할 수 있다.
- 원래 구현을 넘어 기능을 확장하도록 확장될 수 있다.
- 표준 기능을 제공하기 위해 프로토콜을 준수할 수 있다.
- 열거형에는 단수형 이름을 쓴다.
enum CompassPoint {
case north
case south
case east
case west
}
var directionToHead = CompassPoint.west
directionToHead = .east
- switch문은 열거형의 경우를 고려할 때 철저해야 한다.
directionToHead = .south
switch directionToHead {
case .north:
print("Lots of planets have a north")
case .south:
print("Watch out for penguins")
case .east:
print("Where the sun rises")
case .west:
print("Where the skies are blue")
}
- 열거형 case에 대한 모든 관련 값이 상수나 변수로 추출되는 경우 간결함을 위해 case 이름 앞에 var 또는 let을 쓸 수 있다.
switch productBarcode {
case let .upc(numberSystem, manufacturer, product, check):
print("UPC : \(numberSystem), \(manufacturer), \(product), \(check).")
case let .qrCode(productCode):
print("QR code: \(productCode).")
}
CaseIterable protocol
CaseIterable protocol
을 준수하는 유형은 일반적으로 관련 값이 없는 열거형이다. CaseIterable
유형을 사용할 때, allCase
속성을 사용하여 해당 타입의 모든 케이스 컬렉션에 접근할 수 있다. (열거형의 값들을 배열 컬렉션과 같이 순회할 수 있도록 해주는 프로토콜)
- 열거형의 타입에
CaseIterable
을 채택해서 열거형의 case 값들을 for-in loop
나 forEach
등으로 순회할 수 있고 배열 컬렉션에서 사용하는 다양한 메서드도 사용할 수 있다.
Initializing from a Raw Value
- 원시값 타입으로 열거형을 정의하면 열거형은 원시값 타입의 value를 rawValue라는 파라미터로 취하고 열거형 case 또는 nil을 반환하는 이니셜라이저를 자동으로 받는다.
- 아래 예시에서 원시값 7은 uranus이지만, 가능한 모든 Int값이 일치하는 case를 찾는 것은 아니기 때문에, 원시값 이니셜라이저는 항상 옵셔널 열거 case를 반환한다.
enum Planet: Int {
case mercury = 1, venus, earth, mars, jupiter, saturn, uranus, neptune
}
let possiblePlanet = Planet(rawValue: 7)
Error protocol
- 발생할 수 있는 오류 값을 나타내는 형식
Error
프로토콜은 자체 요구사항이 없는 빈 프로토콜이지만, 오류를 표현하기 위한 타입(주로 열거형)은 이 프로토콜을 채택한다.
Error Handling
- Error Handling은 프로그램의 error 조건에 응답하고 복구하는 프로세스다.
- Swift에서 오류를 처리하는 4가지 방법
- 함수에서 해당 함수를 호출하는 코드로 오류를 전파하는 것
- do-catch문을 사용하여 오류처리
- 오류를 옵셔널 값으로 처리
- 오류가 발생하지 않을 거라고 주장하기ㅎ..
참고자료
Enumerations - The Swift Programming Language (Swift 5.5)
Apple Developer Documentation
오류처리