스위프 일반 타입 제약 조건이 프로토콜 이름 인 경우 해당 프로토콜에 제약이있는 두 가지 유형이 같은 유형이어야합니다. 예를 들면 :How do you say 빠른 일반에
protocol Flier {}
struct Bird : Flier {}
struct Insect: Flier {}
func flockTwoTogether<T:Flier>(f1:T, f2:T) {}
flockTwoTogether
가 아니라 조류와 곤충, 조류와 조류 나 곤충과 곤충 호출 할 수있는 기능. 그것이 내가 원하는 한계 다. 여태까지는 그런대로 잘됐다. 내가 클래스 이름과 같은 일을하려고하면
그러나, 그것은 작동하지 않습니다
class Dog {}
class NoisyDog : Dog {}
class WellBehavedDog: Dog {}
func walkTwoTogether<T:Dog>(d1:T, d2:T) {}
문제는 내가 WellBehavedDog과 NoisyDog와 walkTwoTogether
를 호출 할 수 있다는 것입니다. 이것이 내가 막고 싶은 것입니다.
두 가지 질문이 정말로 여기 있습니다 walkTwoTogether
는 WellBehavedDog과 NoisyDog으로 호출 할 수 없습니다 말할 수있는 방법이
있습니까?
이것은 버그입니까? 왜냐하면 일반 함수를 사용할 수 없다면 일반 함수를 사용했을 때와 동일한 결과를 얻을 수 있기 때문에 제네릭 제약이 클래스 이름이되는 것이 왜 유용한 지 알기가 어렵 기 때문입니다.
이것은 나에게 예상되는 것처럼 보입니다. 옵션을 Dog 유형으로 제한했습니다. 두 개의 하위 클래스 모두 해당 유형을 준수하며 선언의 아무 것도 해당 유형을 제한하지 않습니다. 만약 당신이 원하는 것을 할 수있는 방법이 있다면''처럼'where' 절이 필요하다고 기대할 것입니다. 오류. –
cmyr
@cmyr 예, 물론 시도해 보았습니다. 그래서 내가하고있는 일이 그것을하는 방법이 아닌지 묻는 이유입니다. 할 수있는 것이지요. :) – matt
'개'가 프로토콜 인 경우 모두 작동합니다.일반 제약 조건은 비 프로토콜 유형에서는 적용될 수 없습니다. * (무언가 타입 삭제) * – mattt