Swift:递归使用泛型结构

时间:2016-03-29 07:36:55

标签: swift linked-list

我正在玩Swift中的链接列表,我正在使用:

struct Node<Element> {
    var next: Node<Element>? 
}

它会产生此错误:

Recursive value type "Node<Element>" is not allowed.

我尝试在struct声明和属性上使用indirect,但都没有工作。你如何实现这种结构?

3 个答案:

答案 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