2017-02-07 45 views
0

我正在尋找避免編寫不必要的代碼。如果我定義==<爲一個類型,是否有可能自動地獲得<=<==),>(未<和不==),或>=(未<)?我認爲Swift會免費提供這些運營商,但似乎並非如此。Swift是否支持自動生成操作符?

回答

1

如果您使您的類型符合Equatable,它將根據您的==提供默認實現!=

如果你讓你的類型符合Comparable,它會根據你的<提供><=,並且>=默認實現。

請注意,Comparable延伸Equatable,所以你還必須提供==以符合Comparable

+0

清晰簡潔 – BallpointBen

0

是的。

執行==Equatable<Comparable,其餘操作符將按照您的預期使用默認實現。

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 
相關問題