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).因此,值类型不能递归:它将具有无限大小.
Swift中的枚举使用indirect关键字支持递归类型,因此您可以执行以下操作:
indirect enum Tree<T> {
case Node(left: Tree?, right: Tree?, element: T)
}
Run Code Online (Sandbox Code Playgroud)
看看这个伟大的博客文章使用Swift中的间接枚举的持久树
| 归档时间: |
|
| 查看次数: |
3578 次 |
| 最近记录: |