【问题标题】:Swift enum conformance to Equatable when result type used as associated value: Type doesn't conform to protocol Equatable当结果类型用作关联值时,Swift 枚举符合 Equatable:类型不符合 Equatable 协议
【发布时间】:2022-08-02 10:36:35
【问题描述】:
struct Book: Equatable {
    var book: String
}

enum BookAction: Equatable {
    case dataResponse(Result<Book, Error>)
}

我正在运行 swift 版本 5.6.1。我试图理解为什么我会收到一个错误,即 \"type \'BookAction\' 不符合协议 \'Equatable\'\"。虽然如果我将static func == (lhs: BoockAction, rhs: BookAction) -&gt; Bool 添加到枚举中,我可以让它工作,但我认为编译器会在幕后生成等价代码,就像它为 struct Book 所做的那样。似乎它拥有做到这一点所需的一切。

    标签: swift enums


    【解决方案1】:

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

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

    Result&lt;Success, Failure&gt; 只符合Equatable

    Success 符合 EquatableFailure 符合 EquatableFailure 符合 Error

    您的结果失败仅符合ErrorError 还不是Equatable。您可以尝试将 Error 替换为符合 ErrorEquatable 的类型

    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

    【讨论】:

    • 这就是我所缺少的。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2020-12-04
    • 1970-01-01
    • 2016-09-29
    • 1970-01-01
    • 2018-10-23
    • 1970-01-01
    • 1970-01-01
    • 2016-06-07
    相关资源
    最近更新 更多