关于Swift

时间:2015-08-04 07:52:49

标签: swift swift2

我正在通过阅读Apple的书快速编程语言来快速学习,我对递归枚举有一些疑问。 (我已经读过关于它的书,但不太明白)。

示例代码:

    enum ArithmeticExpression {
    case Number(Int)
    indirect case Addition(ArithmeticExpression, ArithmeticExpression)
    indirect case Multiplication(ArithmeticExpression, ArithmeticExpression)
}

据说可以改为:

indirect enum ArithmeticExpression {
    case Number(Int)
    case Addition(ArithmeticExpression, ArithmeticExpression)
    case Multiplication(ArithmeticExpression, ArithmeticExpression)
}

我有三个问题:

Q1。为什么& indirect关键字的目的是什么?

Q2。如果将indirect放在enum前面,是否意味着第一个案例之后的所有案例都是第一个案例的递归案例?

Q3。实际上,上面的示例代码和下面的示例代码(没有indirect关键字)有什么不同:

enum ArithmeticExpression {
        case Number(Int)
        case Addition(ArithmeticExpression, ArithmeticExpression)
        case Multiplication(ArithmeticExpression, ArithmeticExpression)
    }

1 个答案:

答案 0 :(得分:1)

15/08/05 11:19:56 WARN TaskSetManager: Stage 519 contains a task of very large size (226 KB). The maximum recommended task size is 100 KB. 关键字用于告诉编译器,这个indirect是递归的,它必须间接处理它(比如类),因为值类型通常具有固定的内存占用。

如果在enum之前写indirect或者enum与编译器无关。如果您有很多必须标记为cases的案例,则可以使用前者。因此它是一个较短的符号,编译器会指出放置关键字的位置。

由于我之前提到的固定内存占用,你的最后一个例子甚至无法编译。