Programming/Swift

[Swift] 문법다시보기 - 열거형

devssun 2021. 10. 10. 09:03
728x90
반응형

야곰 스위프트 프로그래밍 책을 읽으며 기억해둘 문법을 정리합니다.


열거형

  • 연관된 항목들을 묶어서 표현할 수 있는 타입
  • 프로그래머가 정의해준 항목 값 외에는 추가/수정 불가

연관 값

  • 스위프트의 열거형 각 항목이 연관 값을 가지게 되면 기존 프로그래밍 언어의 공용체 형태를 띌 수도 있다.
  • 열거형 내의 항목(case)이 자신과 연관된 값을 가질 수 있다.
  • 연관 값은 각 항목 옆에 소괄호로 묶어 표현할 수 있다.
// ex. 연관 값을 갖는 열거형

enum MainDish {
    case pasta(taste: String)
    case pizza(dough: String, topping: String)
    case chiken(withSource: Bool)
    case rice
}

var dinner: MainDish = MainDish.pasta(taste: "크림")  // 크림 파스타
dinner = .pizza(dough: "치즈크러스트", topping: "불고기") // 불고기 치즈크러스트 피자
dinner = .chiken(withSource: true)                   // 양념 통닭
dinner = .rice // 밥
  • 파스타의 맛, 피자 도우, 토핑 등을 특정 메뉴로 한정 지으려면 열거형으로 바꾼다.

CaseIterable: protocol

  • 열거형에 포함된 모든 케이스를 알아할 때는 해당 열거형에 CaseIterable protocol 을 채택한다.
  • 그럼 allCases 라는 타입 프로퍼티가 모든 케이스의 컬렉션을 생성해준다
  • available 속성을 통해 특정 케이스에 따라 사용할 수 있거나 없는 경우를 설정할 수 있다. 이런 경우는 allCases 프로퍼티를 직접 구현해야한다.

indirect (순환 열거형)

  • 열거형 항목의 연관 값이 열거형 자신의 값이고자 할 때 사용
  • 특정 항목에만 한정하고 싶다면 case 앞에, 전체에 적용하고 싶다면 enum 앞에 붙인다

Comparable: protocol (비교 가능한 열거형)

  • 연관 값만 갖거나 연관 값이 없는 열거형은 Comparable 프로토콜을 채택하면 각 케이스 비교 가능
  • 앞에 위치한 케이스가 더 작은 값이 된다
반응형