J'essaie d'étendre le protocole afin qu'il puisse satisfaire plusieurs contraintes d'autres protocoles. Comment puis-je ajuster le code pour qu'il soit correct? Merci beaucoup.
extension Moveable where Self: Animal && Self: Aged {
public var canMove: Bool { return true }
}
Vous pouvez utiliser une composition protocole :
extension Moveable where Self: protocol<Animal, Aged> {
// ...
}
Ou simplement ajouter les conformités les unes après les autres:
extension Moveable where Self: Animal, Self: Aged {
// ...
}
Au moment de cet article, la réponse utilise protocol<Animal, Aged>
.
Dans Swift 3.0, protocol<Animal, Aged>
est obsolète.
L'utilisation correcte dans Swift 3.0 est:
extension Moveable where Self: Animal & Aged {
// ...
}
Vous pouvez également combiner les protocoles avec une typealias
. Ceci est utile lorsque vous utilisez une combinaison de protocoles à plusieurs endroits (évite les doublons et favorise la maintenabilité).
typealias AgedAnimal = Aged & Animal
extension Moveable where Self: AgedAnimal {
// ...
}
Depuis Swift 3, vous pouvez utiliser typealias
pour créer des types conformes à plusieurs protocoles:
typealias AgedAnimal = Animal & Aged
Donc, votre code deviendrait:
extension Moveable where Self: AgedAnimal {
// ...
}
Ou comme ceci:
typealias Live = Aged & Moveable
extension Animal where Self: Live {
// ...
}