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
댓글
댓글 쓰기