Swift结构类型递归

Leo*_*ues 10 recursion struct swift

为什么结构体在Swift中不具有递归值类型?这是语言的临时限制还是按预期限制?

我觉得能够将二叉树节点声明为具有递归类型的结构,这是最自然的实现.

struct TreeNode<E>{
var leftNode:TreeNode<E>
var rightNode:TreeNode<E>
var element:E
}
Run Code Online (Sandbox Code Playgroud)

Fre*_*ame 18

答案在你的问题中:结构是值类型.如果在结构中包含子B结构A,则意味着一个类型的对象A将具有大小sizeof(all_other_fields_of_A) + sizeof(B).因此,值类型不能递归:它将具有无限大小.


Mik*_*ard 7

Swift中的枚举使用indirect关键字支持递归类型,因此您可以执行以下操作:

indirect enum Tree<T> {

    case Node(left: Tree?, right: Tree?, element: T)

}
Run Code Online (Sandbox Code Playgroud)

看看这个伟大的博客文章使用Swift中的间接枚举的持久树