Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Swift中初始化类时出现的问题_Swift_Class_Generics - Fatal编程技术网

在Swift中初始化类时出现的问题

在Swift中初始化类时出现的问题,swift,class,generics,Swift,Class,Generics,我正在尝试为二叉树编写一个类。树类本身只有指向根节点的指针,然后树中的节点指向其他节点。我希望每个节点也有用户指定的类型数据,具体取决于树的应用程序,因此我使用类型T将节点类设置为泛型。因为节点类在T中是泛型的,所以在我看来,我还必须在T中将树类设置为泛型,以便在创建树时将T传递给我创建的一个空节点 以下是我的测试代码: enum NodeKind { case notAssigned case leaf case tree } class Node<T> { va

我正在尝试为二叉树编写一个类。树类本身只有指向根节点的指针,然后树中的节点指向其他节点。我希望每个节点也有用户指定的类型数据,具体取决于树的应用程序,因此我使用类型T将节点类设置为泛型。因为节点类在T中是泛型的,所以在我看来,我还必须在T中将树类设置为泛型,以便在创建树时将T传递给我创建的一个空节点

以下是我的测试代码:

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
)。

是的,谢谢,修复了它。我觉得我应该抓住它,但看不见。谢谢你回答这两个问题。