我定义了两个协议。 第一个协议(NameProtocol)需要执行Equatable协议。 而另一个类(BuilderProtocol)有一个返回第一个协议(NameProtocol)的方法。
public protocol NameProtocol : Equatable {
var name: String { get }
}
public protocol BuilderProtocol {
func build() -> NameProtocol? // Compiler error
init()
}
编译器错误: “协议 'NameProtocol' 只能用作泛型约束,因为它具有 Self 或关联类型的要求”
我需要通过 build() 返回符合 NameProtocol 的对象,并且可以在该对象上定义 == 。
有什么方法可以让这个实现起来吗?
谢谢。
如果在 BuilderProtocol 中使用 typealias ,如何使数组声明工作?
public protocol OtherRelatedProtocol {
var allNames : Array<NameProtocol> { get }
}
结论
我将移除Equatable并实现一个isEqual方法。
public protocol NameProtocol {
func isEqual(nameable: NameProtocol) -> Bool
var name: String { get }
}