2016-07-23 7 views
1

구체적으로 확장하려고 시도하는 유형이 있습니다 : AnyObserver<[MyModel]>. 실제로 Element 배열이다, 그러나배열의 일반적인 요소를 받아들이는 형식을 확장하는 방법은 무엇입니까?

extension AnyObserver where Element: MyModel {...} 

, 그래서 내가 좋아하는 뭔가를 시도 : 내가 Element 같은 배열 전달되지 않은 경우 나는 이런 식으로 뭔가를 할 수있는 확장하기 쉬운 것입니다 중 아래의 :

extension AnyObserver where Element: Array<MyModel> {...} 
extension AnyObserver where Element: Array<T: MyModel> {...} 
extension AnyObserver where Element == Array<MyModel> {...} 
extension AnyObserver where Element == [MyModel] {...} 

같은 컴파일 오류에 이러한 결과 : 올바른 방법이 CA에 대한 확장을 만드는 것입니다 무엇

Same-type requirement makes generic parameter non-generic 
Type 'Element' constrained to non-protocol type 

그렇지?

답변

3

일반적으로 특정 형식 매개 변수를 기반으로 제네릭 형식을 확장 할 수 없습니다. 프로토콜을 기반으로 만 확장 할 수 있습니다. 그러나 당신의 특별한 경우에, 그것은 우리에게 밖으로 나옵니다. 그냥 배열이 필요하지 않습니다. CollectionType이 필요합니다.

extension AnyObserver 
    where Element: CollectionType, Element.Generator.Element == MyModel { 
}