![](/img/trans.png)
[英]Swift - how to declare variable/functon of/with enums of different type?
[英]How to declare recursive enums with Swift 2.0
我正在尝试在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的编译示例?
根据发行说明 ,在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不支持这一点,他们的发行说明包含以下措辞:
“间接”枚举元素尚未在此测试版中实现,它们将在稍后的更新中添加。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.