美文网首页
Swift - 递归枚举

Swift - 递归枚举

作者: RugaLuo | 来源:发表于2018-04-26 19:02 被阅读0次

    个人理解

    递归枚举是拥有另一个枚举作为枚举成员关联值的枚举,实际上就是Swift中枚举关联值的特性和递归算法在Swift开发中的运用。

    定义

    下面定义的枚举可以储存三种数学运算表达式:单一的数字,两个两个表达式的加法,以及两个表达式的乘法。定义递归枚举时,需要使用indirect关键字明确枚举成员它是可以递归的。

    enum ArithmeticExpression { 
        case number(Int) 
        indirect case addition(ArithmeticExpression, ArithmeticExpression) 
        indirect case multiplication(ArithmeticExpression, ArithmeticExpression) 
    }
    

    或者在枚举之前写indirect来让整个枚举成员在需要时可以递归:

    indirect enum ArithmeticExpression {
        case number(Int)
        case addition(ArithmeticExpression, ArithmeticExpression)
        case multiplication(ArithmeticExpression, ArithmeticExpression)
    }
    

    应用

    以下代码使用ArithmeticExpression枚举类型定义枚举常量对数学表达式5425 + 4(5 + 4) * 2进行表示。

    let five = ArithmeticExpression.number(5)
    let four = ArithmeticExpression.number(4)
    let sum = ArithmeticExpression.addition(five, four)
    let product = ArithmeticExpression.multiplication(sum, ArithmeticExpression.number(2))
    

    以下函数通过对上述枚举常量的判断从而求出对应的数学表达式的值。

    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)
        }
    }
    print(evaluate(five))    // 打印 "5"
    print(evaluate(four))    // 打印 "4"
    print(evaluate(sum))     // 打印 "9"
    print(evaluate(product)) // 打印 "18"
    

    相关文章

      网友评论

          本文标题:Swift - 递归枚举

          本文链接:https://www.haomeiwen.com/subject/cpvmlftx.html