Тип "Ошибка" не соответствует протоколу "RawRepresentable"
Изменив код моей игровой площадки на Swift 3, Xcode предложил изменить
enum Error: ErrorType {
case NotFound
}
в
enum Error: Error {
case NotFound
}
но теперь я получаю ошибку заголовка и не знаю, как заставить перечисление соответствовать этому протоколу.
4 ответа
Проблема в том, что вы назвали свой тип ошибки Error
- что противоречит стандартной библиотеке Error
протокол (поэтому Свифт думает, что у вас есть круговая ссылка).
Вы могли бы обратиться к Swift Error
протокол как Swift.Error
для устранения неоднозначности:
enum Error : Swift.Error {
case NotFound
}
Но это будет означать, что любые будущие ссылки на Error
в вашем модуле будет ссылаться на ваш Error
тип, а не Свифт 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 может решить проблему, на которую ссылался Хэмиш в отношении будущих ссылок на Error.
enum Error : Swift.Error {
typealias RawValue = NSError
case failedToAddInput
case failedToAddOutput
case failedToSetVideoOrientation
}
Я получаю эту ошибку, потому что я забыл поставить import Foundation
в верхней части моего файла. Просто делиться на случай, если это кому-то поможет.