2015-01-14 2 views
1

스위프트 문서는 프로토콜이 다른 유형과 같이 취급되지만 몇 가지 예를 살펴보면 프로토콜 대신 '유형 제약 조건'구문이 사용되고 있음을 알 수 있습니다.스위프트에서 유형 제약 조건을 언제 사용합니까?

은의이 예를 들어 스위프트 사전을 보자

struct Dictionary<Key: Hashable, Value>: CollectionType, DictionaryLiteralConvertible { 
    // ... 
    subscript (key: Key) -> Value?  
    // ... 
} 

struct Dictionary<Value>: CollectionType, DictionaryLiteralConvertible { 
    // ... 
    subscript (key: Hashable) -> Value?  
    // ... 
} 

처럼 기록 된 수 없다고?

과 함께 유용한 유형 제약 조건을 볼 수 있습니다. 여기에서은 연관된 유형이있는 유형을 조건으로하지만이 특정 예는 확실하지 않습니다.

답변

3

두 번째 예제와 같은 것을 구현하려고하면 컴파일러에서 Protocol 'Hashable' can only be used as a generic constraint because it has Self or associated type requirements이라는 문구를 씁니다. 이는 Hashable이 궁극적으로 Equatable까지 확장되기 때문에 동등한 명령문의 왼쪽과 오른쪽이 모두 정확히 같은 유형 이되어야합니다.입니다. 그러나 두 번째 예에서는 사전 키가 Hashable이어야하며 모든 키가 동일한 구체 유형이 아니어야합니다. 보다 자세한 설명은 this answer을보십시오.

+1

"두 번째 예에서는 사전 키가 Hashable이어야하며 모든 키가 동일한 구체 유형이 아니어야합니다." 감사! –

관련 문제