将我的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.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
在我的文件的顶部。只是分享一下,以防对别人有帮助。