如何在其实现中替换自我

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