当结果类型用作关联值时,Swift 枚举符合 Equatable:类型不符合协议 Equatable

dfr*_*son 2 enums swift

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 所做的那样。看起来它拥有做到这一点所需的一切。

Qua*_* Hà 6

Equatable如果枚举的关联值符合Equatable文档中的 ,则可以自动符合:

对于枚举,其所有关联值都必须符合 Equatable。(即使没有声明,没有关联值的枚举也具有 Equatable 一致性。)

并且Result<Success, Failure>唯一符合Equatablewhen

Success符合EquatableFailure符合EquatableFailure符合Error

你的结果失败只是符合ErrorError还不是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