Generics Swift:泛型树
我正试图在swift中创建一个通用树。我编译的代码,但在运行时被卡住了。与任何树一样,节点通过其父属性和子属性引用自身。但这些都会让人窒息。那么,您应该如何使用泛型在swift中表示树呢?我从早期的测试版中发现了很多问题和尝试,但最近没有发现Generics Swift:泛型树,generics,swift,tree,Generics,Swift,Tree,我正试图在swift中创建一个通用树。我编译的代码,但在运行时被卡住了。与任何树一样,节点通过其父属性和子属性引用自身。但这些都会让人窒息。那么,您应该如何使用泛型在swift中表示树呢?我从早期的测试版中发现了很多问题和尝试,但最近没有发现 protocol TreeNodeProtocol { typealias LeafType : Comparable var representedObject : LeafType { get set } var parent
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.representedObject assert(assumedIndex)在我的Xcode 6.1项目中,您的代码编译和运行没有问题。哦,好吧。我仍然停留在Mavericks和Xcode的第一个版本上。现在是升级的时候了。Xcode 6.1也在Mavericks上运行。