12

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

enum Error: ErrorType {
    case NotFound
}

enum Error: Error {
    case NotFound
}

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

4

5 回答 5

34

问题是你已经命名了你的错误类型Error——这与标准库Error协议冲突(因此 Swift 认为你有一个循环引用)。

为了消除歧义,您可以参考 SwiftError协议:Swift.Error

enum Error : Swift.Error {
    case NotFound
}

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

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

于 2016-09-10T21:40:50.160 回答
2

发生此错误是因为您“覆盖”了现有的声明,Errorprotocol. 因此,您必须为您的 "Error" 选择另一个(可能更具描述性的)名称enum

于 2016-09-10T21:39:08.103 回答
1

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

原因是我正在使用 Realm 并且它具有Error类,这使得Swift.Errorand之间产生了混淆RealmSwift.Error

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

// before
enum MyError: Error { ... }
// after
enum MyError: Swift.Error { ... }
于 2016-09-27T03:31:51.683 回答
0

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

enum Error : Swift.Error {
    typealias RawValue = NSError

    case failedToAddInput
    case failedToAddOutput
    case failedToSetVideoOrientation
}
于 2016-11-19T15:52:32.080 回答
0

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

于 2019-03-15T15:19:56.037 回答