如何在其实现中替换自我
How to replace self on its implementation
我有这个协议
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) {
}
}
我认为您面临的问题有两个要素:
对编译器提示的相同类型的递归引用。基本上,您使用的是 struct
,其大小应该在编译时已知;添加对其类型的递归引用可防止 this
您在协议声明中使用了'Self',这可能会导致创建未完全初始化的实例(参见:Protocol func returning Self);即您需要使用 final
来实现以确保 Self
实例是特定的 class 并因此完全初始化;
我已根据我的意见修改了您的代码:
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 :)
我有这个协议
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) {
}
}
我认为您面临的问题有两个要素:
对编译器提示的相同类型的递归引用。基本上,您使用的是
struct
,其大小应该在编译时已知;添加对其类型的递归引用可防止 this您在协议声明中使用了'Self',这可能会导致创建未完全初始化的实例(参见:Protocol func returning Self);即您需要使用
final
来实现以确保Self
实例是特定的 class 并因此完全初始化;
我已根据我的意见修改了您的代码:
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 :)