类型 'Error' 不符合协议 'RawRepresentable'

Type 'Error' does not conform to protocol 'RawRepresentable'

将我的游乐场代码更改为 Swift 3,Xcode 建议更改

enum Error: ErrorType {
    case NotFound
}

enum Error: Error {
    case NotFound
}

但现在我得到标题错误,我不知道如何让枚举符合该协议。

发生此错误是因为您 "overriding" 现有的 Error 声明是 protocol。因此,您必须为 "Error" enum.

选择另一个(可能更具描述性的)名称

问题是您将错误类型命名为 Error – 这与标准库 Error 协议冲突(因此 Swift 认为您有一个循环引用) .

您可以将 Swift Error 协议称为 Swift.Error 以消除歧义:

enum Error : Swift.Error {
    case NotFound
}

但这意味着以后在您的模块中对 Error 的任何引用都将引用 您的 Error 类型,而不是 Swift Error 协议(你必须再次消除歧义)。

因此,迄今为止最简单的解决方案就是将您的错误类型重命名为更具描述性的内容。

我也遇到了这个问题,尽管我用特定的名称声明了我的枚举。

原因是我正在使用Realm,它有Error class,这使得Swift.ErrorRealmSwift.Error之间的混淆。

解决方案是在声明中指定 RealmSwift.Error

// before
enum MyError: Error { ... }
// after
enum MyError: Swift.Error { ... }

我在 AVCapture 会话中尝试了这个块,它在 Swift 3 + iOS 10 中工作。使用 NSError 作为 RawValue 可能会解决 Hamish 在上面提到的关于未来对 Error 的引用.

enum Error : Swift.Error {
    typealias RawValue = NSError

    case failedToAddInput
    case failedToAddOutput
    case failedToSetVideoOrientation
}

我收到此错误是因为我忘记将 import Foundation 放在文件的顶部。只是分享以防对其他人有帮助。