将"nil"值赋给Swift中的一般类型变量

Jas*_*Kim 10 swift

我认为var value: T = nil是导致错误,因为XCode无法将nil值转换为泛型类型T.

class Node<T> {
    var value: T = nil
    var next: Node

    init(value: T) {
        self.value = value
        self.next = Node()
    }

    init() {
        self.next = Node()
    }
}
Run Code Online (Sandbox Code Playgroud)

错误消息显示

无法找到接受所提供参数的'_coversion'的重载

有没有办法为nilSwift中的变量赋值?

Mag*_*alp 20

您需要将变量声明为可选:

var value: T? = nil
Run Code Online (Sandbox Code Playgroud)

不幸的是,这似乎触发了未实现的编译器功能:

error: unimplemented IR generation feature non-fixed class layout
Run Code Online (Sandbox Code Playgroud)

您可以通过使用NSObject的类型约束声明T来解决它:

class Node<T:NSObject> {
    var value: T? = nil
    var next: Node

    init(value: T) {
        self.value = value
        self.next = Node()
    }

    init() {
        self.next = Node()
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 哦,另一个限制? (3认同)