1. 程式人生 > >iOS Swift中列舉 及用列舉實現遞迴

iOS Swift中列舉 及用列舉實現遞迴

遞迴列舉是一種列舉型別,它有一個或多個列舉成員使用該列舉型別的例項作為關聯值。使用遞迴列舉時,編譯器會插入一個間接層。你可以在列舉成員前加上indirect來表示該成員可遞迴。

enum DiGui {//定義列舉
    case number(Int)//列舉新增關聯值(可以為元組)
    indirect case addition(DiGui,DiGui)
    indirect case multiplication(DiGui,DiGui)
}

//遞迴 遞迴 該函式如果遇到純數字,就直接返回該數字的值。如果遇到的是加法或乘法運算,則分別計算左邊表示式和右邊表示式的值,然後相加或相乘。

    func

evaluate(_ expression: DiGui) -> 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)

        }

    }

//(5+4)*2

        let five = DiGui.number(5)

        let four = DiGui.number(4)

        let sum = DiGui.addition(five, four)

        let cheng = DiGui.multiplication(sum, DiGui.number(2))

        evaluate(cheng)//18