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

标签 ios xcode swift swift2

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

我开始尝试定义我自己的示例:

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

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

因此,我从他们的 WWDC15 What's New in Swift 演示文稿中尝试了 Apple 自己的示例:

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

但它也有同样的编译错误。如果我创建一个新的 Playground 并将这些行粘贴进去,则会导致错误 - 请参阅屏幕截图,或者如果在 Xcode 项目中有同样的事情,请参阅其他屏幕截图。

我正在使用 Xcode 7.0。

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

enter image description here enter image description here

最佳答案

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

Enums and cases can be marked indirect, which causes the associated value for the enum to be stored indirectly, allowing for recursive data structures to be defined.

以下代码适用于 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 无法使用。我不确定这是否与枚举特别相关或只是一般的 beta 不稳定性。


背景:

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

“indirect” enum elements are not yet implemented yet in this beta, they will be added in a later update.

关于ios - 如何使用 Swift 2.0 声明递归枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30967197/

相关文章:

ios - 将 UIScrollView 滚动到被键盘隐藏的 UITextView 的奇怪行为

ios - 复杂对象上的自定义 NSSortDescriptor

ios - 一次加载 10 个单元格行 - swift

ios - 如何查询用户区域之外的帖子? (parse.com)(迅速)

ios - 给 UIView 圆角

swift - NVActivityIndi​​catorView 启动时如何返回?

ios - 设备静音时 AVAudioPlayer 没有声音

ios - 如何在 iOS 应用程序中包含全屏图像

xcode - 如何以编程方式/从脚本向 Xcode 项目添加文件?

ios - 群聊 - 如何仅使用用户参与的聊天室填充表格 View ?