如何使用Swift 2.0声明递归枚举

时间:2015-06-21 17:14:14

标签: ios xcode swift swift2

我尝试在Swift 2中尝试递归枚举但是我遇到了编译错误。

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

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

但是得到一个错误:"一行上的连续声明必须用以下分隔:"。

所以,我尝试了他们的WWDC15中的Apple自己的例子 Swift的新内容演示文稿:

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

但它的编译错误也与此相同。如果我创建一个新的游乐场并粘贴这些行,则会导致错误 - 请参阅屏幕截图,或者如果在Xcode项目中同样的话,请参阅其他屏幕截图。

我正在使用Xcode 7.0。

为什么我甚至无法获得Apple的编译示例?

enter image description here enter image description here

1 个答案:

答案 0 :(得分:16)

根据release notes,在Xcode 7 beta 4中添加了对此的支持,其中声明:

  

枚举和案例可以标记为间接,这会导致相关联   枚举的值是间接存储的,允许递归   要定义的数据结构。

以下代码适用于Playground:

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无法使用。我不确定这是与枚举有关还是只是一般的β不稳定。

背景:

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

  

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