输入'错误'不符合协议' RawRepresentable'

时间:2016-09-10 21:26:48

标签: swift rawrepresentable

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

enum Error: ErrorType {
    case NotFound
}

enum Error: Error {
    case NotFound
}

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

5 个答案:

答案 0 :(得分:28)

问题在于您已将错误类型Error命名为 - 与标准库Error协议冲突(因此Swift认为您已获得循环引用)。< / p>

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

enum Error : Swift.Error {
    case NotFound
}

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

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

答案 1 :(得分:2)

发生此错误是因为您正在&#34;覆盖&#34;现有的Error声明是protocol。因此,您必须为您的&#34;错误&#34;选择另一个(可能更具描述性)名称。 enum

答案 2 :(得分:1)

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

原因是我使用了Realm并且它有Error类,这使得Swift.ErrorRealmSwift.Error之间的混淆。

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

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

答案 3 :(得分:0)

我在AVCapture会话中尝试了这个块,它在Swift 3 + iOS 10中运行。使用NSError作为RawValue可能会解决Hamish在将来引用Error时所引用的内容。

enum Error : Swift.Error {
    typealias RawValue = NSError

    case failedToAddInput
    case failedToAddOutput
    case failedToSetVideoOrientation
}

答案 4 :(得分:0)

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