Swift结构类型递归

时间:2016-03-18 09:20:04

标签: swift recursion struct

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

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

struct TreeNode<E>{
var leftNode:TreeNode<E>
var rightNode:TreeNode<E>
var element:E
}

2 个答案:

答案 0 :(得分:16)

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

答案 1 :(得分:7)

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

indirect

查看这篇精彩的博文A persistent tree using indirect enums in Swift