English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Swift 열거형

열거형은 간단히 말해서 데이터 타입입니다. 그러나 이 데이터 타입은自定义된 특정 데이터만을 포함하며, 공통된 특성을 가진 데이터 집합입니다.

Swift의 열거형은 Objective C와 C의 구조체와 유사하며, 열거형의 기능은 다음과 같습니다:

  • 클래스 내에 선언되며, 클래스를 인스턴스화하여 값을 액세스할 수 있습니다.

  • 열거형은 생성자(initializers)를 정의하여 초기 멤버 값을 제공할 수 있으며, 기본 구현에 기반하여 기능을 확장할 수 있습니다.

  • 프로토콜(protocols)을 준수하여 표준 기능을 제공할 수 있습니다.

문법

Swift에서 enum 키워드를 사용하여 열거형을 생성하고, 그 전체 정의를 대括호로 감싸서 정의합니다:

enum enumname {
   // 열거형 정의는 여기에 위치합니다
}

예를 들어 다음과 같은 주를 나타내는 열거형을 정의합니다:

import Cocoa
// 정의된 열거형
enum DaysofaWeek {
    case Sunday
    case Monday
    case TUESDAY
    case WEDNESDAY
    case THURSDAY
    case FRIDAY
    case Saturday
}
type.
weekDay = .THURSDAY
switch weekDay
{
case .Sunday:
    print("일요일")
case .Monday:
    print("월요일")
case .TUESDAY:
    print("화요일")
case .WEDNESDAY:
    print("수요일")
case .THURSDAY:
    print("목요일")
case .FRIDAY:
    print("금요일")
case .Saturday:
    print("星期六")
}

위 프로그램 실행 출력 결과는 다음과 같습니다:

case \(Saturday):

print("Saturday") instance,is not implicitly assigned a default integer valueSundayis not implicitly assigned a default integer value,……MondayThursday)is the value defined in this enumeration (such asmember value( 또는member)。case

keyword indicates that a new member value will be defined on a new line. Note:-and C and ObjectiveDaysofaWeekC is different, Swift의 열거형 멤버는 생성될 때 기본의 정수 값으로 할당되지 않습니다.instance,is not implicitly assigned a default integer valueSundayis not implicitly assigned a default integer value,……MondaySaturday0is not implicitly assigned a default integer value1is not implicitly assigned a default integer value,……6andDaysofaWeek다른 경우, 이 열거형 멤버 자체에 완전한 값이 있으며, 이 값은 이미 명확히 정의된 값입니다

type.

weekDayvar weekDay = \(DaysofaWeek.THURSDAYDaysofaWeekpossible value is inferred when initialized. OnceweekDaywhich is declared as aDaysofaWeekyou can use a shorthand syntax(.) to set it to anotherDaysofaWeekvalue:

var weekDay = \(THURSDAY

whenweekDay타입이 알려졌을 때, 다시 할당할 때 열거형 이름을 생략할 수 있습니다. 명시적인 데이터 타입의 열거형 값은 코드의 가독성을 높일 수 있습니다.

열거형은 관련 값과 기본 값으로 나눌 수 있습니다.

관련 값과 기본 값의 차이

관련 값원시 값
다른 데이터 타입같은 데이터 타입
예제: enum {10,0.8,"Hello"예제: enum {10,35,50}
값은 상수나 변수에 기반하여 생성됩니다기본 설정 값
관련 값은 새로운 상수나 변수를 생성할 때 설정되며, 이렇게 할 때마다 값이 다를 수 있습니다.기본 값은 항상 같습니다

관련 값

이 예제에서는 Student라는 열거형 타입을 정의했습니다. 이는 Name의 문자열(String)이나 Mark의 관련 값(Int,Int,Int)일 수 있습니다.

import Cocoa
enum \(Student{
    case \(Name(String)
    case \(Mark(Int,Int,Int)
}
var \(studDetails) = \(Student.Name("w3codebox")
var \(studMarks) = \(Student.Mark(98,97,95)
switch \(studMarks) {
case \(studName)(\(studName):
    print("학생의 이름은: \(studName)。"
case \(Mark(\(Mark1, \(Mark2, \(Mark3):
    print("학생의 성적은: \(Mark1),\(Mark2),\(Mark3)。)
}

위 프로그램 실행 출력 결과는 다음과 같습니다:

학생의 성적은: 98,97,95。

원시 값

원시 값은 문자열, 문자, 또는 어떤 정수형 또는 실수형 값이 될 수 있습니다. 각 원시 값은 열거형 선언에서 유일해야 합니다。

원시 값이 정수인 열거형에서는 각 구성원에 대해 명시적으로 값을 할당하지 않아도 됩니다. Swift는 자동으로 값을 할당합니다。

예를 들어, 정수를 원시 값으로 사용할 때 순차적으로 증가하는 값으로 자동으로 할당됩니다1。첫 번째 값이 초기화되지 않았다면 자동으로 0으로 설정됩니다。

import Cocoa
enum Month: Int {
    case January = 1, February, March, April, May, June, July, August, September, October, November, December
}
let yearMonth = Month.May.rawValue
print("숫자 월은: \(yearMonth)。")

위 프로그램 실행 출력 결과는 다음과 같습니다:

숫자 월은: 5。