繁体   English   中英

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

[英]Swift enum conformance to Equatable when result type used as associated value: Type doesn't conform to protocol Equatable

struct Book: Equatable {
    var book: String
}

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

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

如果 Equatable 关联的值符合Equatable Equatable来自文档:

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

并且Result<Success, Failure>仅在符合Equatable

Success符合EquatableFailure符合EquatableFailure符合Error

您的结果失败仅符合Error并且Error is not Equatable yet。 您可以尝试将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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM