游戏崩溃为递归值类型

Ras*_*sto 6 struct ios swift xcode6

Xcode playground崩溃了这段代码 - 如果在项目中它阻止了编译.

我试图声明一个非常简单的结构:

struct Node<T> {
    let value: T
    var next: Node<T>?

    init(_ value: T) {
        self.value = value
        next = nil
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我在XCode playground中执行此操作,则会收到以下错误消息:与playground服务的通信意外中断.

如果我在XCode中的单独文件中声明此结构,则无法编译项目.我得到的只是在这种情况下由于信号命令失败:分段错误:11.

有人可以帮我这个吗?有解决方法吗?任何帮助非常感谢.

小智 2

引用 swift 文档,“结构在代码中传递时总是会被复制,并且不使用引用计数。” [1]

您尝试实现的链表通过在当前节点上存储对下一个节点的指针或引用来工作。这样,每个节点就有相同的大小。另一方面,Swift 的结构不是引用类型。每个节点的大小会有所不同,具体取决于它必须递归存储的节点数量。

实现您尝试对 struct 执行的操作的一种方法是使用UnsafeMutablePointer. 我不需要警告你,因为快速执行此操作会让你每隔几行就写“不安全”。

struct Node<T> {
    var x: T
    // Setting pointer type to <Node<T>> compiles, but infinite loops on runtime (Swift 1.2)
    var next: UnsafeMutablePointer<Void>
}

var second = Node(x: 2, next: nil)
var first = Node(x: 1, next: &second)

print(unsafeBitCast(first.next, UnsafeMutablePointer<Node<Int>>.self).memory.x) // Prints 2
Run Code Online (Sandbox Code Playgroud)

[1] https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/ClassesAndStructures.html