struct Book: Equatable {
var book: String
}
enum BookAction: Equatable {
case dataResponse(Result<Book, Error>)
}我运行的是快速版本5.6.1。我试图理解为什么我会收到一个错误:“类型'BookAction‘不符合协议’赤道‘”。虽然我可以让它工作,如果我添加一个static func == (lhs: BoockAction, rhs: BookAction) -> Bool到枚举,我认为编译器会在幕后产生平等的代码,就像它为结构书。似乎它具备了所需的一切。
发布于 2022-07-25 01:03:58
如果Enum的关联值符合Equatable,则Enum可以从文档中自动符合Equatable:
对于一个枚举,它的所有关联值都必须符合可等价物。(即使没有声明,没有关联值的枚举也具有相等的一致性。)
并且Result<Success, Failure>只在下列情况下才符合Equatable
Success符合Equatable,Failure符合Equatable,Failure符合Error。
您的结果的失败只符合Error,而Error还不是Equatable。您可以尝试将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
https://stackoverflow.com/questions/73103079
复制相似问题