2016-09-10 99 views

回答

24

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

你可以参考斯威夫特Error协议作为Swift.Error为了消除歧义:

enum Error : Swift.Error { 
    case NotFound 
} 

但是,这将意味着你的模块中Error任何未来的引用将参考Error类型,而不是Swift Error协议(你将不得不再次消除歧义)。

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

+1

因此,在旧版本中,我不会已经能够说出我的枚举错误类型,但现在雨燕协议名称已更改为错误,我不能使用错误,对吧? – Shades

+2

@Shades Yup,这是正确的 - 如果您在构建设置(将使用Swift 2.3)中将“使用传统Swift语言版本”变为“Yes”,您可以自己尝试。 – Hamish

2

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

1

我也有这个问题,虽然我宣布我的枚举具体名称。

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

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

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

我在AVCapture会尝试这一块,它工作在斯威夫特3 +的iOS 10.使用一个NSError作为RawValue可能解决什么哈米什指的是上述关于未来的引用错误。

enum Error : Swift.Error { 
    typealias RawValue = NSError 

    case failedToAddInput 
    case failedToAddOutput 
    case failedToSetVideoOrientation 
} 
相关问题