我已经定义了 2 个协议。我需要第一个(NameProtocol)来执行 Equatable 协议。而另一个类(BuilderProtocol)有一个返回第一个类(NameProtocol)的方法。
public protocol NameProtocol : Equatable {
var name: String { get }
}
public protocol BuilderProtocol {
func build() -> NameProtocol? // Compiler error
init()
}
编译器错误:“Protocol '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 }
}