21. 10. 14 열거형, 오류처리

Allie·2021년 11월 20일
0

TIL

목록 보기
4/15

Enumerations 열거형

  • 초기 케이스 값을 제공하기 위해 initializer를 정의할 수 있다.
  • 원래 구현을 넘어 기능을 확장하도록 확장될 수 있다.
  • 표준 기능을 제공하기 위해 프로토콜을 준수할 수 있다.
  • 열거형에는 단수형 이름을 쓴다.
enum CompassPoint {
    case north
    case south
    case east
    case west
}

var directionToHead = CompassPoint.west
directionToHead = .east

// directionToHead가 CompassPoint로 선언되었기 때문에 .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")
}
// Prints "Watch out for penguins"

// .west에 대한 case가 생략되면 이 코드는 CompassPoint case의 전체 목록을 고려하지 않기 때문에
// 컴파일되지 않는다.
// 그렇지 않을 경우, default를 사용하면 된다.
  • 열거형 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).")
}
// Prints "QR code: ABCDEFGHIJKLMNOP."

CaseIterable protocol

  • CaseIterable protocol을 준수하는 유형은 일반적으로 관련 값이 없는 열거형이다. CaseIterable 유형을 사용할 때, allCase속성을 사용하여 해당 타입의 모든 케이스 컬렉션에 접근할 수 있다. (열거형의 값들을 배열 컬렉션과 같이 순회할 수 있도록 해주는 프로토콜)
  • 열거형의 타입에 CaseIterable을 채택해서 열거형의 case 값들을 for-in loopforEach등으로 순회할 수 있고 배열 컬렉션에서 사용하는 다양한 메서드도 사용할 수 있다.

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)
// possiblePlanet is of type Planet? and equals Planet.uranus

Error protocol

  • 발생할 수 있는 오류 값을 나타내는 형식
  • Error 프로토콜은 자체 요구사항이 없는 빈 프로토콜이지만, 오류를 표현하기 위한 타입(주로 열거형)은 이 프로토콜을 채택한다.

Error Handling

  • Error Handling은 프로그램의 error 조건에 응답하고 복구하는 프로세스다.
  • Swift에서 오류를 처리하는 4가지 방법
    • 함수에서 해당 함수를 호출하는 코드로 오류를 전파하는 것
    • do-catch문을 사용하여 오류처리
    • 오류를 옵셔널 값으로 처리
    • 오류가 발생하지 않을 거라고 주장하기ㅎ..

참고자료

Enumerations - The Swift Programming Language (Swift 5.5)

Apple Developer Documentation

오류처리

profile
게발자🦀 되는 중.. 궁김하다.. 궁김해..

0개의 댓글