2 つのプロトコルを定義しました。Equatable プロトコルを適用するには、最初のもの (NameProtocol) が必要です。他のクラス (BuilderProtocol) には、最初のクラス (NameProtocol) を返すメソッドがあります。
public protocol NameProtocol : Equatable {
var name: String { get }
}
public protocol BuilderProtocol {
func build() -> NameProtocol? // Compiler error
init()
}
コンパイラ エラー:「プロトコル 'NameProtocol' は、自己型または関連付けられた型の要件があるため、一般的な制約としてのみ使用できます」
NameProtocol に準拠し、== を定義できるオブジェクトを返すには、build() によって返されるオブジェクトが必要です。
これを機能させる方法はありますか?
ありがとう
BuilderProtocol で typealias を使用している場合、配列宣言を機能させるにはどうすればよいですか?
public protocol OtherRelatedProtocol {
var allNames : Array<NameProtocol> { get }
}
結論
Equatable を削除し、isEqual メソッドを実装します。
public protocol NameProtocol {
func isEqual(nameable: NameProtocol) -> Bool
var name: String { get }
}