【问题标题】:Swift struct type recursionSwift 结构类型递归
【发布时间】:2016-07-04 23:28:32
【问题描述】:

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

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

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

【问题讨论】:

  • 你需要先了解引用类型和值类型的区别。你写的东西在大多数语言中是不可能的。例如,在 C/Obj-C/C++ 中,leftNoderightNode 必须是指针。在 Swift 中,如果你想使用引用,你应该使用 class 而不是 struct。另请注意,您可能需要选项。

标签: swift recursion struct


【解决方案1】:

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

indirect enum Tree<T> {

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

}

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

【讨论】:

  • 我知道这种方法,但我想避免它的持久性。
【解决方案2】:

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

【讨论】:

  • 仅供参考:关键是了解@Sulthan 所解释的值类型。
猜你喜欢
  • 1970-01-01
  • 2016-12-11
  • 1970-01-01
  • 2017-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-08
相关资源
最近更新 更多