【发布时间】:2016-09-10 21:26:48
【问题描述】:
将我的 Playground 代码更改为 Swift 3,Xcode 建议更改
enum Error: ErrorType {
case NotFound
}
到
enum Error: Error {
case NotFound
}
但现在我收到标题错误,我不知道如何让枚举符合该协议。
【问题讨论】:
将我的 Playground 代码更改为 Swift 3,Xcode 建议更改
enum Error: ErrorType {
case NotFound
}
到
enum Error: Error {
case NotFound
}
但现在我收到标题错误,我不知道如何让枚举符合该协议。
【问题讨论】:
问题是您将错误类型命名为 Error - 这与标准库 Error 协议冲突(因此 Swift 认为您有循环引用)。
您可以将 Swift Error 协议称为 Swift.Error 以消除歧义:
enum Error : Swift.Error {
case NotFound
}
但这将意味着您模块中任何将来对Error 的引用都将引用您的 Error 类型,而不是Swift Error 协议(您必须再次消除歧义) .
因此,到目前为止,最简单的解决方案就是将错误类型重命名为更具描述性的名称。
【讨论】:
出现此错误是因为您“覆盖”了Error 的现有声明,即protocol。因此,您必须为“错误”enum 选择另一个(可能更具描述性)名称。
【讨论】:
我也遇到了这个问题,尽管我用特定的名称声明了我的枚举。
原因是我使用的是 Realm,它有 Error 类,这使得 Swift.Error 和 RealmSwift.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 放在文件顶部。只是分享以防万一它帮助别人。
【讨论】: