2017-02-07 17 views
0

私は不要なコードを書くことを避けるために探しています。私はタイプのため==<を定義した場合、それは自動的に<=<または==)、>(ない<なく==)、または>=(ない<)を得ることができますか?私はSwiftがこれらの通信事業者を無料で提供するだろうと考えていますが、そうではないようです。Swiftはオペレータの自動生成をサポートしていますか?

答えて

1

タイプをEquatableに準拠させると、==に基づいて、デフォルトの実装は!=になります。

あなたのタイプはComparableに適合させる場合、それはあなたの<に基づい><=、および>=のデフォルトの実装を提供します。 ComparableEquatableを拡張するので、あなたもComparableに準拠するように==を提供しなければならないこと

注意。

+0

明確で簡潔な – BallpointBen

0

はい。

ComparableからEquatable<から==を実装し、あなたが期待するよう事業者の残りの部分は、デフォルトの実装を使用します。

、カスタムタイプにComparableの適合性を追加するタイプの静的メソッドとして<==演算子を定義します。 ==オペレータはEquatableプロトコルの要件であり、Comparableが拡張されています。Swiftの同等性の詳細については、そのプロトコルのドキュメントを参照してください。残りの関係演算子のデフォルトの実装は標準ライブラリによって提供されるため、!=,><=、および>=を、コードなしでタイプのインスタンスとともに使用することができます。

1

はい。それは正確にはComparableプロトコルの仕組みです。 2つの演算子:<==を定義するだけです。スウィフトは残りを把握します。

struct MyStruct : Comparable { 
    var value: Int 
} 

func == (lhs: MyStruct, rhs: MyStruct) -> Bool { 
    return lhs.value == rhs.value 
} 

func < (lhs: MyStruct, rhs: MyStruct) -> Bool { 
    return lhs.value < rhs.value 
} 

let a = MyStruct(value: 1) 
let b = MyStruct(value: 42) 

print(b > a) // We never defined `>` operator 
関連する問題