[Swift] - Enumeration

Din의 개발노트·2020년 12월 16일

안녕하세요:)
오늘은 동일한 이름에 속한 상수 그룹을 선언하고 다양하게 매칭시키는 방법에 대해 알아보도록 하겠습니다.

1. Enumeration

  • 열거형이란 하나의 주제로 연관된 데이터들이 멤버로 구성되어 있는 자료형 객체를 의미합니다.
  • 열거형에 포함된 상수들은 상수라고 부르지 않고 Enumeration Case라고 부릅니다. 짧게 case라고 합니다.
  • 열거형은 독립적인 자료형입니다.
  • 열거형에 포함되어 있는 Case도 독립적인 이름을 가지고 있습니다.
  • 열거형을 사용하면 코드의 가독성과 안전성이 높아집니다.
  • 변수나 상수에 enum의 타입을 명시해주면 형식추론이 가능해집니다.
  • 열거형은 보통 switch문과 함께 사용됩니다.
enum TypeName { // 문법: 열거형은 독립적인 형식, UppercamelCase
    case caseName
    case caseName, caseName
}
enum Alignment {
    case left
    case center
    case right
}
Alignment.left
Alignment.center
Alignment.right

var textAlignment = Alignment.center
textAlignment = .left

textAlignment = .justify // 케이스에 선언하지 않을 걸 저장하면 에러가 발생합니다.

enum Direction {
    case north
    case south
    case east
    case west
}
Direction.north

let directionToHead: Direction = .east
switch directionToHead {
case .north:
    print("북쪽 입니다.")
case .south:
    print("남쪽 입니다.")
case .east:
    print("동쪽 입니다.")
case .west:
    print("서쪽 입니다.")
} // 모든 경우의 수를 처리해주었기 때문에 default를 생략했습니다.

2. Raw Value

  • 열거형 항목에 값을 추가할 수 있습니다.
  • Int, Double, String을 추가할 수 있고, 거의 Int만 사용됩니다.
  • 열거형 객체에 타입 어노테이션으로 타입을 추가하고, 첫 번째 멤버에 시작할 값을 지정하면 됩니다.
  • 선언 시점에 선언한 원시값은 나중에 다른 값으로 바꿀 수 없습니다.
  • 필수적이지 않고, 선택적으로 사용하면 됩니다.
enum TypeName: RawValueType {
    case caseName = Value
    case caseName, caseName
}
enum Alignment: Int {
    case left
    case right = 100
    case center
} // 원시값의 자료형이 Int로 선언됩니다.


// 원시값에 접근
Alignment.left.rawValue // 0
Alignment.right.rawValue // 100
Alignment.center.rawValue // 101
Alignment(rawValue: 0) // 파라미터로 rawValue를 전달하면 동일한 rawValue를 가진 case가 생성됩니다.
Alignment(rawValue: 200) // 이 값을 가진 케이스는 없으니까 nil이 리턴됩니다.



enum Weekday: String {
    case sunday
    case monday = "MON"
    case tuesday
    case wednesday
    case thursday
    case friday
    case saturday
} 

Weekday.sunday.rawValue // sunday원시값의 자료형을 문자열로 선언하고 원시값을 생략하면 케이스 이름과 동일한 원시값이 저장됩니다.

Weekday.monday.rawValue // MON
profile
iOS Develpoer

0개의 댓글