[英]Swift enum conformance to Equatable when result type used as associated value: Type doesn't conform to protocol Equatable
struct Book: Equatable {
var book: String
}
enum BookAction: Equatable {
case dataResponse(Result<Book, Error>)
}
我正在运行 swift 版本 5.6.1。 我试图理解为什么我收到“类型'BookAction'不符合协议'Equatable'”的错误。 虽然如果我添加一个static func == (lhs: BoockAction, rhs: BookAction) -> Bool
到枚举,我可以让它工作,但我认为编译器会在幕后生成可等价的代码,就像它为结构所做的那样书。 似乎它拥有做到这一点所需的一切。
如果 Equatable 关联的值符合Equatable
Equatable
来自文档:
对于枚举,其所有关联值必须符合 Equatable。 (即使没有声明,没有关联值的枚举也具有 Equatable 一致性。)
并且Result<Success, Failure>
仅在符合Equatable
时
Success
符合Equatable
,Failure
符合Equatable
,Failure
符合Error
。
您的结果失败仅符合Error
并且Error
is not Equatable
yet。 您可以尝试将Error
替换为同时符合Error
和Equatable
的类型
enum BookAction: Equatable {
case dataResponse(Result<Book, ActionError>)
}
struct ActionError: Error, Equatable { }
参考:
https://developer.apple.com/documentation/swift/equatable https://developer.apple.com/documentation/swift/result
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.