1
有一個通用的枚舉Result<T>
如何在Swift中製作一個泛型枚舉Equatable?
enum Result<T> {
case success(T)
case error
}
如何使其符合斯威夫特3或更高版本的Equatable
協議?
我已經試過如下:
extension Result: Equatable {
static func ==<T: Equatable>(lhs: Result<T>, rhs: Result<T>) -> Bool {
switch (lhs, rhs) {
case let (.success(lhsVal), .success(rhsVal)):
return lhsVal == rhsVal
case (.error, .error):
return true
default:
return false
}
}
}
然而,這將產生一個編譯器錯誤:Type 'Result<T>' does not conform to protocol 'Equatable'
我也試過如下:
extension Result: Equatable {
static func ==(lhs: Result, rhs: Result) -> Bool {
switch (lhs, rhs) {
case let (.success(lhsVal), .success(rhsVal)):
return lhsVal == rhsVal
case (.error, .error):
return true
default:
return false
}
}
}
然而,這會產生編譯器錯誤:Binary operator '==' cannot be applied to two 'T' operands
啊,它確實有幫助。謝謝@vadian!不幸的是,這意味着我需要在'Result'枚舉定義的相同項目中爲'T'編寫'Equatable'擴展。造成問題的原因是我只需要在我的單元測試項目中將enum設置爲「Equatable」,而不是在應用程序本身中。你有沒有想法如何解決這個問題,即不在主代碼庫中添加與Equatable單元測試相關的代碼? – Alex
如何讓'Result'不總是需要'Equatable'? –
@RodrigoRuiz如果你不需要'Equatable'省略它。 – vadian