[swift] “프로토콜…은 자체 또는 관련 유형 요구 사항이 있기 때문에 일반 제약으로 만 사용할 수 있습니다.”는 무엇을 의미합니까?

Swift에서 사용자 정의 프로토콜을 기반으로 하는 Dictionary (실제로 HashSet ) 를 만들려고 하는데 제목에 오류가 있습니다.

프로토콜 ‘myProtocol’은 자체 또는 관련 유형 요구 사항이 있기 때문에 일반 제약 조건으로 만 사용할 수 있습니다.

머리도 꼬리도 만들 수 없습니다.

protocol Observing: Hashable { }

var observers = HashSet<Observing>()



답변

프로토콜 Observing은 프로토콜 Hashable에서 상속되며 차례로 프로토콜에서 상속됩니다 Equatable. 프로토콜 Equatable에는 다음 요구 사항이 있습니다.

func ==(lhs: Self, rhs: Self) -> Bool

그리고 Self그 안에 어딘가 를 포함하는 프로토콜 은 유형 제약을 제외하고는 어디에도 사용할 수 없습니다.

여기에 비슷한 질문입니다.


답변

이를 해결하기 위해 제네릭을 사용할 수 있습니다. 이 예를 고려하십시오.

class GenericClass<T: Observing> {
   var observers = HashSet<T>()
}


답변