ios indirect 如何用Swift 2.0声明递归枚举



swift indirect (1)

我试图在Swift 2中试验递归枚举,但是我得到编译错误。

我开始试图定义我自己的例子:

enum Tree {
    case Empty
    indirect case Node(value: Int, left: Tree, right: Tree)
}

但是得到一个错误:“一行中的连续声明必须用下划分”。

所以,我尝试了苹果公司从他们的WWDC15上的例子Swift演示中的新功能:

enum Tree<T> {
  case Leaf(T)
  indirect case Node(Tree, Tree) 
}

但是与此相同的汇编错误也是如此。 如果我创建一个新的游乐场并粘贴这些行,那么会导致错误 - 请参见截图,或者如果在Xcode项目中,请参阅其他截图。

我正在使用Xcode 7.0。

我怎么连苹果的例子都不能编译?


Answer #1

根据发行说明 ,在Xcode 7 beta 4中增加了对此的支持,其中指出:

枚举和实例可以被标记为间接的,这会导致enum的相关值间接存储,从而允许定义递归数据结构。

以下代码在游乐场中工作:

enum Tree {
    case Empty
    indirect case Node(value: Int, left: Tree, right: Tree)
}

let tree1 = Tree.Node(value: 0, left: Tree.Empty, right: Tree.Empty)
let tree2 = Tree.Node(value: 0, left: Tree.Node(value: -1, Tree.Empty, Tree.Empty), right: Tree.Empty)

有趣的是,试图使用switch的枚举工作正常,但使用新的Swift 2 if case语法反复使Xcode崩溃,并使Playground无法使用。 我不确定这是专门针对枚举还是一般的beta不稳定。

背景:

当时这个问题最初被问及这个答案被接受,Xcode beta1是最新的版本。 Xcode 7 beta1-beta3不支持这一点,他们的发行说明包含以下措词:

“间接”枚举元素尚未在此测试版中实现,它们将在稍后的更新中添加。





swift2