在Swift中初始化类时出现的问题
我正在尝试为二叉树编写一个类。树类本身只有指向根节点的指针,然后树中的节点指向其他节点。我希望每个节点也有用户指定的类型数据,具体取决于树的应用程序,因此我使用类型T将节点类设置为泛型。因为节点类在T中是泛型的,所以在我看来,我还必须在T中将树类设置为泛型,以便在创建树时将T传递给我创建的一个空节点 以下是我的测试代码:在Swift中初始化类时出现的问题,swift,class,generics,Swift,Class,Generics,我正在尝试为二叉树编写一个类。树类本身只有指向根节点的指针,然后树中的节点指向其他节点。我希望每个节点也有用户指定的类型数据,具体取决于树的应用程序,因此我使用类型T将节点类设置为泛型。因为节点类在T中是泛型的,所以在我看来,我还必须在T中将树类设置为泛型,以便在创建树时将T传递给我创建的一个空节点 以下是我的测试代码: enum NodeKind { case notAssigned case leaf case tree } class Node<T> { va
enum NodeKind {
case notAssigned
case leaf
case tree
}
class Node<T> {
var kind = NodeKind.notAssigned
var parent: Node<T>? // if a tree node, pointer to parent node, else nil
var child0: Node<T>? // if a tree node, points to a child if it exists, else nil
var child1: Node<T>? // optionals are automatically inited to nil
var data: T // data type of the user data
init( data: T) {
self.data = data
}
}
class BinaryTree<T> {
var root: Node<T> // pointer to the root of the binary tree
init( data: T) {
root = Node<T>( data: T) // create one empty node at the root
}
}
var testTree = BinaryTree<Int>( data: 5)
enum NodeKind{
未分配案件
箱叶
案例树
}
类节点{
var kind=NodeKind.notAssigned
var parent:Node?//如果是树节点,则指向父节点的指针,否则为nil
var child0:Node?//如果是树节点,则指向子节点(如果存在),否则为nil
var child1:Node?//选项会自动初始化为nil
var data:T//用户数据的数据类型
初始化(数据:T){
self.data=数据
}
}
类二叉树{
变量根:节点//指向二叉树根的指针
初始化(数据:T){
root=Node(数据:T)//在根节点上创建一个空节点
}
}
var testTree=BinaryTree(数据:5)
我的意图是,最后一条语句应该创建一个包含Int类型用户数据的节点的BinaryTree实例,var testTree的根应该指向一个data==5且没有子节点或父节点的节点实例
但是,最后一行出现编译器错误:
无法将类型“T.type”的值转换为预期的参数类型“T”
有各种建议的修复方法,但没有一种有效。我该怎么写
第二,“T.Type”是什么意思?我不熟悉这个结构
谢谢,Eric第一个问题:
在BinaryTree
类的初始值设定项中,我假设您正在尝试创建一个新的节点
,该节点存储T
类型的输入数据。但是,您将类型T
分配给data
,而不是实际的data
本身
要解决此问题,请更改BinaryTree
类的初始值设定项:
init(数据:T){
root=Node(data:data)//在根节点上创建一个空节点
}
第二个问题
T.Type
是指事物本身的类型(在本例中为Int
),但不是该事物的实例(在本例中为5
)。是的,谢谢,修复了它。我觉得我应该抓住它,但看不见。谢谢你回答这两个问题。