Swift 如何在其实现上取代self
我有这个协议Swift 如何在其实现上取代self,swift,generics,swift-protocols,type-alias,associated-types,Swift,Generics,Swift Protocols,Type Alias,Associated Types,我有这个协议 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 { typeal
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) {
}
}
我认为你面临的问题有两个方面:
- 对编译器提示的相同类型的递归引用。基本上,您使用的是
,其大小应该在编译时就知道;向其类型添加递归引用可以防止这种情况结构
- 您在协议声明中使用“Self”,这可能导致创建非完全初始化实例的情况(请参阅:);i、 e您需要使用
进行实施,以确保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:)您不能拥有包含itself@LeoDabus即使它是可选的,也没有任何区别使用类而不是结构。