Swift에서 공변 반환 유형을 지원하는 방법이 있습니까? 그것을보고 분명하더라도, 오버라이드 (override) 서명이 정확히 기본 정의와 일치하지 않기 때문에스위프트 : 공변량을 재정의 하시겠습니까?
가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은 컴파일러 오류가 발생합니다 :
예를 들어, 나는 다음과 같은 시나리오를 지원하고 싶습니다 오버라이드 (override)에 의해 반환 된 내용은 여전히 기본 정의의 계약을 충족합니다.
나를 달성 할 수있는 방법이 있습니까? Swift 3에 대한 답변도 감사 할 것입니다.
이 접근법은'b'에 접근하기 위해'Derived '로 강제 변환해야하는 인쇄 라인을 분해합니다. OP는 파생 클래스가 super의 반환 유형에서 파생 된 특정 유형을 반환하도록하여 캐스팅이 필요하지 않도록합니다. –