2016-06-23 17 views
0

> 기능 만 필요한 프로토콜이 있습니다. 필자는 프로토콜에 comform하는 두 객체를 비교하려고 할 때 "더 많은 컨텍스트없이 표현의 유형이 모호합니다"라는 메시지와 함께 컴파일러 오류를 제공합니다. 차라리 나는 그것을 피할 수 있다면 기능을 필요로하지 않을 것이다. 사람들이 무엇을 사용하여 비교하는지 (>)를 고수해야한다.왜 프로토콜에서`더 많은 컨텍스트가 필요합니까? '연산자가 있습니까?

그래서 두 가지 질문이 있습니다. 내가 왜 이럴 수 없어? 이 작업을 수행하는 더 좋은 방법이 있습니까? 아니면 좋은 해결 방법이 있습니까?

감사합니다.

protocol Compare { 
    func >(lhs: Compare, rhs: Compare) -> Bool 
} 


class TheClass { 

    func hey(aCompare: Compare, theCompare: Compare) { 
     if aCompare > theCompare { 
      print("aCompare is greater than theCompare") 
     } 
    } 

} 
+2

originaluser2 @ 감사를 컴파일? 어떤 경우에는 프로토콜 요구 사항은'func> (lhs : Self, rhs : Self) -> Bool'이어야하고,'hey' 함수를위한 일반 매개 변수를 사용해야합니다. 그렇다고해서 'Comparable'을 직접 사용하지 않는 이유는 무엇입니까? – Hamish

+1

여기서 무엇을하려고합니까? 당신의'Compare'는'type'입니까? Swift의 운영자에게 문의하십시오. https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/AdvancedOperators.html – Santosh

+0

예. 죄송합니다. 감사합니다. 나는 그 질문을 조정할 것이다. – KKendall

답변

0

오히려 > 운영자의 프로토콜을 사용하는 것보다, 나는 애플의 EquatableComparable 프로토콜과 같은 Self를 사용해야합니다.

protocol Compare { 
    func >(lhs: Self, rhs: Self) -> Bool 
} 


class TheClass { 

    func hey(aCompare: Compare, theCompare: Compare) { 
     if aCompare > theCompare { 
      print("aCompare is greater than theCompare") 
     } 
    } 

} 

지금 여기 스위프트의`>`연산자와 인터페이스하려고 .. @jrturton 및

관련 문제