struct Book: Equatable {
var book: String
}
enum BookAction: Equatable {
case dataResponse(Result<Book, Error>)
}
Run Code Online (Sandbox Code Playgroud)
我正在运行 swift 版本 5.6.1。我试图理解为什么我收到“类型‘BookAction’不符合协议‘Equatable’”的错误。虽然如果我向枚举添加 a 就可以让它工作static func == (lhs: BoockAction, rhs: BookAction) -> Bool,但我认为编译器会在幕后生成可等同的代码,就像为结构 Book 所做的那样。看起来它拥有做到这一点所需的一切。
Equatable如果枚举的关联值符合Equatable文档中的 ,则可以自动符合:
对于枚举,其所有关联值都必须符合 Equatable。(即使没有声明,没有关联值的枚举也具有 Equatable 一致性。)
并且Result<Success, Failure>唯一符合Equatablewhen
Success符合Equatable、Failure符合Equatable、Failure符合Error。
你的结果失败只是符合Error,Error还不是Equatable。您可以尝试将您替换为同时符合和 的Error类型ErrorEquatable
enum BookAction: Equatable {
case dataResponse(Result<Book, ActionError>)
}
struct ActionError: Error, Equatable { }
Run Code Online (Sandbox Code Playgroud)
参考:
https://developer.apple.com/documentation/swift/equatable https://developer.apple.com/documentation/swift/result
| 归档时间: |
|
| 查看次数: |
1760 次 |
| 最近记录: |