为什么结构体在Swift中具有递归值类型? 这是语言的临时限制还是按预期限制?
我觉得能够将二叉树节点声明为具有递归类型的结构,这是最自然的实现。
struct TreeNode<E>{
var leftNode:TreeNode<E>
var rightNode:TreeNode<E>
var element:E
}
答案 0 :(得分:16)
答案在你的问题中:结构是值类型。如果在结构B
中包含子结构A
,则意味着,A
类型的一个对象的大小为sizeof(all_other_fields_of_A) + sizeof(B)
。因此,值类型不能递归:它将具有无限大小。
答案 1 :(得分:7)
Swift中的枚举使用a[i]
关键字支持递归类型,因此您可以执行以下操作:
indirect