我有这个协议
protocol BinaryTreeProtocol {
associatedtype T
var info: T { get set }
var left: Self? {get set}
var right: Self? {get set}
func addItem(item: T)
}
我无法完成其实现。
struct BinaryTreeImplementation: BinaryTreeProtocol {
typealias T = Int
var info: Int
var left: BinaryTreeImplementation? // There is an error here.
var right: BinaryTreeImplementation? // how can I sort it?
func addItem(item: Int) {
}
}
答案 0 :(得分:1)
我认为您面临的问题有两个要素:
对与编译器提示的类型相同的递归引用。基本上,您使用的是struct
,在编译时应该知道其大小;向其类型添加递归引用可以防止这种情况
您在协议声明中使用“ Self”,这可能会导致创建未完全初始化的实例的情况(请参阅:Protocol func returning Self);也就是说,您需要使用final
进行实施,以确保Self
实例属于特定类并因此被完全初始化;
我已经修改了反映我的评论的代码:
protocol BinaryTreeProtocol {
associatedtype T
var info: T { get set }
var left: Self? {get set}
var right: Self? {get set}
func addItem(item: T)
}
final class BinaryTreeImplementation: BinaryTreeProtocol {
typealias T = Int
var info: Int = 0
var left: BinaryTreeImplementation?
var right: BinaryTreeImplementation?
func addItem(item: Int) {
}
}
希望这会有所帮助,并享受Swift:)