2016-09-10 2 views
6

меняет площадку код Swift 3, Xcode предложил измененияТипа «Ошибка» не соответствует протоколу «RawRepresentable»

enum Error: ErrorType { 
    case NotFound 
} 

в

enum Error: Error { 
    case NotFound 
} 

но теперь я получаю ошибку в заголовке и я не знаю, как получить перечисление для соответствия этому протоколу.

ответ

24

Проблема в том, что вы назвали свой тип ошибки Error - который противоречит стандартной библиотеке протокола Error (поэтому Свифт считает, что у вас есть круговая ссылка).

Вы можете обратиться к Error протоколу Swift в Swift.Error, чтобы неоднозначность:

enum Error : Swift.Error { 
    case NotFound 
} 

Но это будет означать, что любые будущие ссылки на Error в вашем модуле будет ссылаться на вашError типа, а не Swift Error (вам придется снова устранить неоднозначность).

Поэтому самым простым решением было бы просто переименовать ваш тип ошибки в нечто более наглядное.

+1

Так, в старой версии, я не был бы в состоянии назвать мое перечисление ERRORTYPE, но теперь, когда имя Swift протокола было изменено Error, я не могу использовать ошибки, не так ли? – Shades

+2

@Shades Yup, это правильно - если вы включите «Использовать устаревшую версию языка Swift» в «Да» в настройках сборки (в которой будет использоваться Swift 2.3), вы можете попробовать ее сами. – Hamish

2

Эта ошибка возникает из-за того, что вы «переопределяете» существующее объявление Error, которое является . Поэтому вам нужно выбрать другое (возможно более описательное) имя для вашей «Ошибка» enum.

1

У меня тоже есть эта проблема, хотя я объявил свое перечисление с определенным именем.

Причина в том, что я использую Realm, и у него есть класс Error, что делает смущение между Swift.Error и RealmSwift.Error.

В заявке указывается RealmSwift.Error.

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

Я попробовал этот блок в AVCapture сессии, и она работает в Swift 3 + IOS 10. Использование NSError как RawValue могли бы решить, что Хэмиш имел в виду выше относительно будущих ссылок на ошибку.

enum Error : Swift.Error { 
    typealias RawValue = NSError 

    case failedToAddInput 
    case failedToAddOutput 
    case failedToSetVideoOrientation 
} 
Смежные вопросы