250x250
반응형
Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
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
Archives
Today
Total
관리 메뉴

개발자 수니

[iOS/Swift/Basic] 열거형 Enumerations : 순환 열거형 - indirect 본문

iOS - Swift

[iOS/Swift/Basic] 열거형 Enumerations : 순환 열거형 - indirect

개발자 수니 2024. 1. 26. 20:35
728x90
반응형

📑 이전글

[iOS/Swift/Basic] 열거형 Enumerations : 원시값 Raw Values, 연관값 Associated Values

[iOS/Swift/Basic] 열거형 Enumerations : 항목 순회 - CaseIterable

 

 

순환 열거형 Recursive Enumerations

  • 열거형(Enumerations)의 연관 값(Associated Values)이 열거형 자신의 값이고자 할 때 사용
  • 이진 탐색 트리 등의 순한 알고리즘을 구현할 때 유용하게 사용 가능

 

indirect

순환 열거형(Recursive Enumerations)을 명시할 때 사용하는 키워드

 

indirect case

  • 특정 항목(case)에만 한정
enum ArithmeticExpression {
    case number(Int)
    indirect case addition(ArithmeticExpression, ArithmeticExpression)
    indirect case multiplication(ArithmeticExpression, ArithmeticExpression)
}

 

indirect enum

  • 열거형(Enumerations) 전체에 적용
indirect enum ArithmeticExpression {
    case number(Int)
    case addition(ArithmeticExpression, ArithmeticExpression)
    case multiplication(ArithmeticExpression, ArithmeticExpression)
}
  • 순환 열거형(Recursive Enumerations)를 활용한 계산기 예제
// ArithmeticExpression 계산을 도와주는 Recursive Function
func evaluate(_ expression: ArithmeticExpression) -> Int {
    switch expression {
    case let .number(value):
        return value
    case let .addition(left, right):
        return evaluate(left) + evaluate(right)
    case let .multiplication(left, right):
        return evaluate(left) * evaluate(right)
    }
}

func recurciveEnumerationsExample() {
    let six = ArithmeticExpression.number(6)
    let three = ArithmeticExpression.number(3)
    let sum = ArithmeticExpression.addition(six, three)
    let final = ArithmeticExpression.multiplication(sum, ArithmeticExpression.number(2))

    let result: Int = evaluate(final)
    print("(6 + 3) * 2 = \(result)")    // (6 + 3) * 2 = 18
}

 

 

 

 

🙋🏻‍♀️ 참고

야곰, ⌜스위프트 프로그래밍: Swift5⌟, 한빛미디어(2019)

728x90
반응형
Comments