Ale*_*lex 2 generics extension-methods enums swift swift3
有一个通用的枚举 Result<T>
enum Result<T> {
case success(T)
case error
}
Run Code Online (Sandbox Code Playgroud)
如何使其符合Equatable
Swift版本3或更高版本中的协议?
我尝试过以下方法:
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
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是,这会产生编译器错误: 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
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是,这会产生编译器错误: Binary operator '==' cannot be applied to two 'T' operands
是否有助于将泛型类型约束为Equatable
?
enum Result<T : Equatable> {
case success(T)
case error
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1118 次 |
最近记录: |