提问人:Oliver Pearmain 提问时间:5/16/2023 最后编辑:Solomon UckoOliver Pearmain 更新时间:5/16/2023 访问量:72
Swift:结果的失败类型不能是协议 - “Type 'any ShadowError' cannot conform to Error”
Swift: Result's Failure Type cannot be protocol - "Type 'any ShadowError' cannot conform to Error"
问:
Error
是一个协议,一个人能够做到这一点......
let x: Result<Void, Error> = .success(())
ShadowError
符合并且也是一种协议,但一个人无法做到这一点......Error
protocol ShadowError: Error {}
let x: Result<Void, ShadowError> = .success(()) // FAILS Type 'any ShadowError' cannot conform to Error
因为编译器抱怨这个错误
类型“any ShadowError”不能符合“错误”
结果失败类型是(或其他)吗?ShadowError
protocol
答:
2赞
Rob Napier
5/16/2023
#1
这不可能作为协议。您可以将 ShadowError 设置为枚举或结构体(甚至是包装另一个 Error 的结构体),但它不能是协议。协议存在(协议的“任何”实例)不符合协议,因此不是错误。这有一个神奇的例外:确实符合 .但你不能重现它。它只是.any ShadowError
any Error
Error
Error
有关此内容的文档,请参阅 SE-0235 将结果添加到标准库:
作为此提案准备工作的一部分,为错误(并且仅错误)添加了自一致性。这对于在通用上下文中处理错误通常也很有用。
这种自一致性不会扩展到包括 Error 协议在内的协议组合,而只扩展到确切的 Error 类型。将来可以添加这样的组合,但这超出了 Swift 5 的范围。
评论
0赞
Oliver Pearmain
5/16/2023
是错误魔术让我问了这个问题。在这种情况下,协议如何获得通过?仅供参考。Error
评论