4

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 }
}
4

1 に答える 1