我正在尋找避免編寫不必要的代碼。如果我定義==
和<
爲一個類型,是否有可能自動地獲得<=
(<
或==
),>
(未<
和不==
),或>=
(未<
)?我認爲Swift會免費提供這些運營商,但似乎並非如此。Swift是否支持自動生成操作符?
0
A
回答
1
如果您使您的類型符合Equatable
,它將根據您的==
提供默認實現!=
。
如果你讓你的類型符合Comparable
,它會根據你的<
提供>
,<=
,並且>=
默認實現。
請注意,Comparable
延伸Equatable
,所以你還必須提供==
以符合Comparable
。
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
相關問題
- 1. Swift是否支持WebRTC?
- 2. 操作自動生成列
- 3. D是否支持文檔生成?
- 4. Eclipse CDT方法自動生成支持
- 5. 的Microsoft Excel互操作檢查是否Excel工作表支持自動調整
- 6. 檢索所有可能的支持操作的列表,自動生成查詢
- 7. SQL是否支持重新定義基礎操作符?
- 8. SQL Server JDBC驅動程序是否支持異步操作?
- 9. backbone.stickit是否支持自動填充?
- 10. ClojureBox是否支持自動對齊框?
- 11. ListView是否自動支持lazyload?
- 12. DynamoDB的映射器是否支持查詢自動生成的密鑰?
- 13. ocaml的REPL是否支持自動完成等?
- 14. Sublime Text是否支持Ruby API(自動完成)?
- 15. ODM查詢生成器:是否存在「反向」操作符或等效操作?
- 16. Delphi支持哪些操作符重載?
- 17. 刪除不支持Javascript的操作符
- 18. 是否可以自動發現DLL導出並生成互操作代碼?
- 19. 條紋支付是否支持自動循環付款?
- 20. ElasticSearch是否自動生成ID順序?
- 21. asp.net是否會自動生成Javascript?
- 22. Phonegap是否支持原生Android菜單?
- 23. 故事板是否支持Push Pop操作?
- 24. Bing新聞搜索API v7是否支持高級操作員?
- 25. GAE是否支持EHCache的寫後操作?
- 26. 是否有任何操作系統不支持線程?
- 27. Qt框架是否支持操作視頻文件?
- 28. MsmqIntegrationBinding是否支持多種服務操作
- 29. DynamoDB是否支持更新操作(如關係數據庫)
- 30. Android操作系統是否支持OTA配置?
清晰簡潔 – BallpointBen