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



将我的playground代码更改为Swift 3, Xcode建议更改

enum Error: ErrorType {
    case NotFound
}

enum Error: Error {
    case NotFound
}

但是现在我得到了标题错误,我不知道如何使enum符合该协议

问题是你将错误类型命名为Error -这与标准库Error协议冲突(因此Swift认为你得到了一个循环引用)。

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

enum Error : Swift.Error {
    case NotFound
}

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

因此,到目前为止最简单的解决方案就是将错误类型重命名为更具描述性的名称。

出现此错误是因为您"重写"了Error的现有声明,该声明是protocol。所以你必须为你的"错误" enum选择另一个(可能更具描述性的)名称。

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

原因是我正在使用Realm,它有Error类,这使得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在我的文件的顶部。只是分享一下,以防对别人有帮助。

相关内容

  • 没有找到相关文章

最新更新