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
复制相似问题