2016-06-23 9 views
0

私は>機能しか必要としないプロトコルを持っています。私がプロトコルに準拠している2つのオブジェクトを比較しようとすると、コンパイルエラーが発生しました。「式のタイプは文脈がなくてもあいまいです。私はむしろ私がそれを避けることができる場合、私はむしろ人々が比較するために使用するために使用されるものに固執したいと思う(>)機能isGreaterThan(...)(または何か)を必要としません。なぜプロトコルで ``より多くのコンテキストが必要ですか?

2つの質問があります。なぜ私はこれをすることができないのですか?これを行うためのよりよい方法があるのか​​、それともよい解決策ですか?

ありがとうございます!

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

ここで何をしようとしていますか? '比較'は '型'ですか? Swiftのオペレータを参照してくださいhttps://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/AdvancedOperators.html – Santosh

+0

はい申し訳ありません、そしてありがとう!私は質問を調整します。 – KKendall

答えて

0

よりもむしろ>オペレータにプロトコルを使用して、私はAppleの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と

関連する問題