Swift 프로그래밍 - 열거형(Enumerations)

Swift 프로그래밍 - 열거형(Enumerations)

열거형(Enumeration) 타입은 유사한 종류의 여러 값들을 정의하여 이들을 코드 내에서 type-safe하게 사용할 수 있게 돕는다. C의 열거형보다 훨씬 유동적인 Swift의 열거형 타입을 배워보자.

내용 및 예시 코드의 일부는 다음에서 발췌됨

The Swift Programming Language (Swift 5.1)

Apple Inc.

https://books.apple.com/kr/book/the-swift-programming-language-swift-5-1/id881256329

이 자료는 저작권에 의해 보호됩니다.

Xcode 설치/교재 다운로드

The Basics

Basic Operators

Strings and Characters

Collection Types

Control Flow

Functions

Closures

Enumerations

Structures and Classes

Properties

Methods

Subscrips

Inheritance

Initialization

Deinitialization

Optional Chaining

Error Handling

Type Casting

Nested Types

Extensions

Protocols

Generics

Opaque Types

Automatic Reference Counting

Memory Safety

Access Control

Advanced Operators

Enumeration Syntax

- Enumeration case들은 그 자체로 값이다

- 복수의 case들을 콤마로 구분하여 서술할 수 있다

- Enumeration의 이름은 self-evident하기 위해 단수로 서술, 첫글자는 대문자

- enum을 변수에 대입한 경우 이후에는 enum이름을 쓸 필요는 없음

enum Season{ case spring, summer, autumn, winter } var currentSeason = Season.spring currentSeason = .summer

switch currentSeason{ //exhaustive해야함 case .spring: print("봄") default: print("쓰기 귀찮아,,") }

enum Season: CaseIterable{ case spring, summer, autumn, winter } for i in Season.allCases{ print("It's \(i)") }

Associated Values

- case값들로 서로 다른 타입을 포함하는게 유용한 경우가 있음

- 다른 타입인 경우 둘 중 하나에만 대입 가능(switch statement?)

- 만일 case값의 모든 변수, 상수를 사용한다면 아래 경우처럼 let, var를 case 뒤에 쓰면 된다

enum BusFee{ case Child(String, Int) case Adult(Int) } var busCard: BusFee = .Child("청소년입니다", 800) busCard = .Adult(1200) switch busCard{ case let .Adult(adultFee): print("\(adultFee)원 입니다") case let .Child(childInfo, childFee): print("\(childInfo) " + "\(childFee)원 입니다") }

Raw Values

- Enumeration의 case값에 특정 값을 대입할 수 있음

- Enum과 각 case가 unique한 값을 가져야 함?

case는 같은 타입 다른 값을 가져야함

- 다른 값을 가질 수 있는 Assiciated value와 달리 값이 고정되어 있음

- 각 값은 함축된(implicit) 값을 가지며, Int값을 대입한 것이 아니라면(대입한 경우 숫자순으로 차례 대입) 그 자체가 그것의 rawValue

enum Planet: Int{ case mercury = 0, venus, earth, mars, jupiter, saturn, uranus, neptune } print(Planet.venus.rawValue) //1 if let planet = Planet(rawValue: 10){ print("It is \(planet)") } else{ print("There's no such planet") //출력됨 }

Recursive Enumerations

- indirect 키워드를 통해 재귀적인 enumeration 생성 가능

- ????

from http://jagosipo.tistory.com/17 by ccl(S) rewrite - 2020-03-11 07:54:30

댓글

이 블로그의 인기 게시물

데이터 바인딩 추상화 - propertyEditor

[sts] spring boot groovy 적용 실행 하기

2020 LCK 롤챔스 Spring 경기 재개 및 일정