Swift递归枚举的简单运用

Swift枚举中有一种特殊用法叫做递归枚举,在枚举中可以调用自己,这样可以很方便的来表达一些链式的表达式。例如表达数字计算式等等。下列是一个简单例子,使用递归枚举和递归函数来实现简单的表达式计算函数。

import Foundation

/*使用递归枚举表达加减乘除*/
/*并使用函数计算结果*/
indirect enum math {
    case num(Int)
    case plus(math,math)
    case sub(math,math)
    case multi(math,math)
    case divide(math,math)
}

/*
 表达(3+5)*20/5
 */

let three = math.num(3)
let five = math.num(5)
let threePlusFive = math.plus(three, five)
let multiTwenty = math.multi(threePlusFive, math.num(20))
let divideFive = math.divide(multiTwenty, math.num(5))

func calculate(expresion : math) -> Int {
    switch expresion {
    case let .num(value):
        return value
    case let .multi(first, seconde):
        return calculate(expresion: first) * calculate(expresion: seconde)
    case let .plus(first, seconde):
        return calculate(expresion: first) + calculate(expresion: seconde)
    case let .divide(first, seconde):
        return calculate(expresion: first) / calculate(expresion: seconde)
    default:
        return -1
    }
}

print(calculate(expresion: divideFive))

你可能感兴趣的:(Swift递归枚举的简单运用)