est-il possible de prendre en charge les types de retour covariant dans Swift?Swift: les substitutions covariantes?
Par exemple, je voudrais soutenir le scénario suivant:
class Animal {}
class Dog : Animal{}
class Cat : Animal {}
class AnimalResidency{
func getAllAnimals() -> Array<Animal> {
return []
}
}
class Cattery : AnimalResidency{
override func getAllAnimals() -> Array<Cat> {
return [Cat(), Cat()]
}
}
class DogKennel : AnimalResidency {
override func getAllAnimals() -> Array<Dog> {
return [Dog(), Dog(), Dog(), Dog()]
}
}
Func surchargée produit une erreur de compilation parce que la signature de overrides ne correspond pas exactement à la définition de base, même si il est clair pour voir le contenu renvoyé par le remplacement correspond toujours au contrat de la définition de base.
Y at-il un moyen pour moi d'atteindre ce qui précède? J'apprécierais même une réponse pour Swift 3.
Cette approche se décompose sur la ligne d'impression où vous devez forcer le cast à 'Derived' pour accéder à' b'. OP aimerait que les classes dérivées renvoient des types spécifiques dérivés du type de retour de super, de sorte que la conversion n'est pas nécessaire. –