我尝试在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的编译示例?
答案 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不支持这一点,他们的发行说明包含以下措辞:
“间接”枚举元素尚未在此测试版中实现, 它们将在稍后的更新中添加。