Swift

Enumeration

728x90

안녕하세요:)

 

오늘은 Enumeration에 대해서 알아보도록 하겠습니다.

 

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
728x90

'Swift' 카테고리의 다른 글

Property - 1  (0) 2020.11.24
Structure and Class  (0) 2020.11.22
Dictionary  (0) 2020.11.20
Array  (0) 2020.11.19
String Compare, Search, Option  (0) 2020.11.19