Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.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
Generics Swift:泛型树_Generics_Swift_Tree - Fatal编程技术网

Generics Swift:泛型树

Generics Swift:泛型树,generics,swift,tree,Generics,Swift,Tree,我正试图在swift中创建一个通用树。我编译的代码,但在运行时被卡住了。与任何树一样,节点通过其父属性和子属性引用自身。但这些都会让人窒息。那么,您应该如何使用泛型在swift中表示树呢?我从早期的测试版中发现了很多问题和尝试,但最近没有发现 protocol TreeNodeProtocol { typealias LeafType : Comparable var representedObject : LeafType { get set } var parent

我正试图在swift中创建一个通用树。我编译的代码,但在运行时被卡住了。与任何树一样,节点通过其父属性和子属性引用自身。但这些都会让人窒息。那么,您应该如何使用泛型在swift中表示树呢?我从早期的测试版中发现了很多问题和尝试,但最近没有发现

protocol TreeNodeProtocol
{
typealias LeafType      : Comparable
var representedObject   : LeafType  { get set }
var parent                  : Self?     { get set }
var children                : [Self]?   { get set }
}

final class TreeNode<LeafType : Comparable> : TreeNodeProtocol, Comparable
{
var parent      : TreeNode?     = nil
var children    : [TreeNode]?   = nil
var representedObject : LeafType

init(representedObject : LeafType)
{
    self.representedObject = representedObject
}
}

func == <LeafType: Comparable> (left : TreeNode<LeafType>, right :    TreeNode<LeafType>) -> Bool
{
return left.representedObject == right.representedObject
 }

func < <LeafType: Comparable> (left : TreeNode<LeafType>, right : TreeNode<LeafType>) -> Bool
{
 return left.representedObject < right.representedObject
}


class Tree<LeafType : Comparable>
{
  typealias TreeNodeType = TreeNode<LeafType>

  var description : String { return "a Tree" }
  var rootNodes : [TreeNodeType] = []
  func insertRootNode(node : TreeNodeType, atIndex index: Int? = nil)
  {
    let assumedIndex = index ?? rootNodes.count
    assert(assumedIndex <= rootNodes.count, "Tree: index exceeds bounds")
    rootNodes.insert(node, atIndex: assumedIndex)
  }

func insertRootNode(representedObject : LeafType, atIndex index: Int? = nil)
{
    let newRootNode = TreeNodeType(representedObject: representedObject)
    let assumedIndex = index ?? rootNodes.count
    assert(assumedIndex <= rootNodes.count, "Tree: index exceeds bounds")
    rootNodes.insert(newRootNode, atIndex: assumedIndex)
}

}


let aTree = TreeNode<String>(representedObject: "d") //it doesn't go past this point
println(aTree)
协议TreeNodeProtocol
{
typealias LeaftType:可比较
var representedObject:LeafType{get set}
var父级:Self?{get set}
变量子项:[Self]?{get set}
}
最终等级TreeNode:TreeNodeProtocol,可比
{
变量父项:TreeNode?=nil
变量子项:[TreeNode]?=nil
var representedObject:LeafType
init(representedObject:LeafType)
{
self.representedObject=representedObject
}
}
func==(左:TreeNode,右:TreeNode)->Bool
{
返回left.representedObject==right.representedObject
}
func<(左:TreeNode,右:TreeNode)->Bool
{
返回left.representedObjectassert(assumedIndex)在我的Xcode 6.1项目中,您的代码编译和运行没有问题。哦,好吧。我仍然停留在Mavericks和Xcode的第一个版本上。现在是升级的时候了。Xcode 6.1也在Mavericks上运行。