我正在玩Swift中的链接列表,我正在使用:
struct Node<Element> {
var next: Node<Element>?
}
它会产生此错误:
Recursive value type "Node<Element>" is not allowed.
我尝试在struct声明和属性上使用indirect,但都没有工作。你如何实现这种结构?
答案 0 :(得分:3)
当您编写var next: Node<Element>?
时,Swift会尝试将此存储内联,但由于它是递归的,因此会产生无限大小的结构。
indirect
仅适用于枚举,因此您可以执行以下操作:
enum Node<Element> {
indirect case Node(Element, next: Node?)
}
Node.Node(42, next: nil)
或者您可以使用常规参考类型,例如:{。{1}}:
class
答案 1 :(得分:2)
似乎无法创建struct的递归使用,但您可以使用ng-if
,关联值和enum
属性来完成。
递归枚举是一个具有另一个实例的枚举 枚举作为一个或多个的关联值 枚举案件。您指示枚举情况是递归的 通过在它之前写间接,它告诉编译器插入 必要的间接层。
indirect
代码取自AirspeedVelocity。
答案 2 :(得分:0)
Structs无法实现。使用值类型进行链接列表似乎也不明智。除非你想做什么
head.next.next.next.next.next = head.next.next.next.next.next.next
要删除第七个节点,您将希望能够设置
let next = head.next