他のプロトコルからの複数の制約を満たすことができるように、プロトコルを拡張しようとしています。正しいようにコードを調整するにはどうすればよいですか?どうもありがとう。
extension Moveable where Self: Animal && Self: Aged {
public var canMove: Bool { return true }
}
プロトコル構成 を使用できます:
extension Moveable where Self: protocol<Animal, Aged> {
// ...
}
または、次々に適合性を追加します。
extension Moveable where Self: Animal, Self: Aged {
// ...
}
この投稿の時点では、答えはprotocol<Animal, Aged>
を使用しています。
Swift 3.0では、protocol<Animal, Aged>
は廃止されました。
Swift 3.0での正しい使用法は次のとおりです。
extension Moveable where Self: Animal & Aged {
// ...
}
プロトコルをtypealias
と組み合わせることもできます。これは、複数の場所でプロトコルの組み合わせを使用している場合に役立ちます(重複を避け、保守性を向上させます)。
typealias AgedAnimal = Aged & Animal
extension Moveable where Self: AgedAnimal {
// ...
}
Swift 3なので、typealias
を使用して、複数のプロトコルに準拠するタイプを作成できます。
typealias AgedAnimal = Animal & Aged
したがって、コードは次のようになります。
extension Moveable where Self: AgedAnimal {
// ...
}
またはこのように:
typealias Live = Aged & Moveable
extension Animal where Self: Live {
// ...
}