[Swift] 3-5-4. 열거형_항목순회

"""
///열거형_순환열거형
"""
//열거형 항목의 연관값이 열거형 자신의 값이고자 할때 사용합니다. 순환열거형을 명시하고 싶다면 indirect키워드를 사용 특정항목에만 한정하고 싶다면 case키워드앞에 indirect를 붙이면되고, 열거형 전체에적용하 고싶다면 enum키워드 앞에 indirect 키워드를 붙이면됩니다.

//특정항목에순환열거형항목명시
enum ArithmeticExpression {
    case number(Int)
    indirect case addiction(ArithmeticExpression, ArithmeticExpression)
    indirect case multiplication(ArithmeticExpression, ArithmeticExpression)
}

//열거형 전체에 순환 열거형 명시
indirect enum ArithmeticExpression2 {
    case number (Int)
    case addition(ArithmeticExpression2, ArithmeticExpression2)
    case multiplication(ArithmeticExpression2, ArithmeticExpression2)
}

//열거형에는 정수를 연관값으로 갖는 number라는 항목이 있고 덧셈을 위한 adition이라는 항목, 곱셈을 위한 multiplication 항목이있습니다. ArithmeticExpression열거형을 사용하여 (5+4) x 2 연산을 구현해보는 예제입니다.
let five = ArithmeticExpression.number(5)
let four = ArithmeticExpression.number(4)
let sum = ArithmeticExpression.addiction(five, four)
let final = ArithmeticExpression.multiplication(sum, ArithmeticExpression.number(2))

// evaluate는 ArithmeticExpression열거형의 계산을 도와주는 순환합수 입니다.
func evaluate(_expression: ArithmeticExpression) -> Int {
    switch expression {
    case .number(let value):
        return value
    case .addiction(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)") //(5+4) * 2 = 18
Comment