Swift 文檔說Equatable
,只有在結構或枚舉的原始定義中聲明了一致性,而不是通過擴展,在這種情況下,==
運算符的實現必須是假如。
但是,以下代碼有效。
struct Point {
var x: Double
var y: Double
}
extension Point: Equatable {}
print(Point(x: 10, y: 10) == Point(x: 5, y: 5)) // prints false
這也是。
enum Outcome {
case success
case failure(reason: String)
}
extension Outcome: Equatable {}
print(Outcome.failure(reason: "Chance") == Outcome.failure(reason: "Chance")) // prints true
有誰知道這個功能在哪裡記錄。
謝謝。
綜合提案 ( SE-0185 ) 與您鏈接的文檔有所不同:
用戶必須通過將其類型聲明為 Equatable 或 Hashable 來選擇加入自動合成,而無需實現他們的任何要求。這種一致性必須是原始類型聲明的一部分或同一文件中的擴展名(以確保可以從擴展名訪問 private 和 fileprivate 成員)。
根據提案,在同一文件中的擴展中聲明一致性也會自動生成所需的成員,這符合實際行為。如果您在與類型不同的文件中聲明擴展名,您應該會看到一條錯誤消息:
文件聲明結構“Point”之外的擴展會阻止協議“Equatable”自動合成“==”
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句