일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- PHP
- ftz level13
- System
- level13
- 미로 탐색 알고리즘
- OSI
- 자료구조
- web
- 암호수학
- SWiFT
- C
- c언어
- 시간복잡도
- pwnable.kr
- LoB
- 파일 시스템
- 백준
- 큐
- windosws wbcs
- Stack
- 두근두근 자료구조
- War Game
- ftz
- HTML
- 재귀
- Java
- 파이썬
- 정렬 알고리즘
- 스택
- windosw 문자열
Archives
- Today
- Total
나의 기록, 현진록
[Swift] 4.5.5 순환 열거형 본문
반응형
스위프트 프로그래밍 3판 - 야곰 지음
4.5.5 순환 열거형
순환 열거형은 열거형 항목의 연관 값이 열거형 자신의 값이고자 할 때 사용한다. indirect 키워드를 사용하면 되는데 특정 항목에만 한정하고 싶다면 case 앞에, 열거형 전체에 적용하고 싶다면 enum 키워드 앞에 indirect 키워드를 붙이면 된다.
특정 항목에 순환 열거형 명시
enum ArithmeticExpression{
case Number(Int)
indirect case addition(ArithmeticExpression, ArithmeticExpression)
indirect case multiplication(ArithmeticExpression, ArithmeticExpression)
}
열거형 전체에 순환 열거형 명시
indirect enum ArithmeticExpression{
case Number(Int)
case addition(ArithmeticExpression, ArithmeticExpression)
case multiplication(ArithmeticExpression, ArithmeticExpression)
}
다음은 열거형으로 (5+4) * 2 연산을 구현하는 예제이다. number는 정수 연관 값을 가지고 addition은 덧셈 기능을 multiplication은 곱셈 기능을 하는 ArithmeticExpression 열거형이다.
enum ArithmeticExpression{
case number(Int)
indirect case addition(ArithmeticExpression, ArithmeticExpression)
indirect case multiplication(ArithmeticExpression, ArithmeticExpression)
}
let five = ArithmeticExpression.number(5)
let four = ArithmeticExpression.number(4)
let sum = ArithmeticExpression.addition(five, four)
let final = ArithmeticExpression.multiplication(sum, ArithmeticExpression.number(2))
func evaluate(_ expression: ArithmeticExpression) -> Int{
switch expression {
case .number(let value):
return value
case .addition(let left, let right):
return evaluate(left) + evaluate(right)
case .multiplication(let left, let right):
return evaluate(left)*evaluate(right)
}
}
let result: Int = evaluate(final)
print("(5+4) * 2 = \(result)")
비교 가능한 열거형을 구현할 수도 있다.
Comparable 프로토콜을 채택하면 각 케이스를 비교할 수 있다. 앞에 위치한 케이스가 더 작은 값이다.
enum Condition: Comparable{
case terrible
case bad
case good
case great
}
let myCondition: Condition = Condition.great
let yourCondition: Condition = Condition.bad
if myCondition >= yourCondition{
print("제 상태가 더 좋군요")
}else{
print("당신의 상태가 더 좋아요")
}
enum Device: Comparable{
case iPhone(version: String)
case iPad(version: String)
case macBook
case iMac
}
var devices: [Device] = []
devices.append(Device.iMac)
devices.append(Device.iPhone(version: "14.3"))
devices.append(Device.iPhone(version: "6.1"))
devices.append(Device.iPad(version: "10.3"))
devices.append(Device.macBook)
let sortedDevices: [Device] = devices.sorted()
print(sortedDevices)
반응형
'Programming > Swift' 카테고리의 다른 글
[Swift] 7 함수 / 함수 정의와 호출 / 매개변수 (0) | 2021.07.12 |
---|---|
[Swift] 6.1.2 switch 구문 (0) | 2021.07.05 |
[Swift] 4.5.3 연관 값 / 4.5.4 항목 순회 (0) | 2021.07.02 |
[Swift] 4.5 열거형 / 원시 값 (0) | 2021.07.01 |
[Swift] 1.2.2 함수형 / 함수형 프로그래밍 패러다임 (0) | 2021.07.01 |