Swift 2.1 ErrorType не соответствует протоколу RawRepresentable

Я объявил тип ошибки

enum UserServicesError: ErrorType {
    case UserNotLogged
}

но я получаю ошибку

Argument type 'UserServicesError' does not conform to expected type 'ErrorType'

Type 'UserServicesError' does not conform to protocol 'RawRepresentable'

Есть идеи у? Официальная документация гласит, что этой декларации достаточно.

Apple Swift 2.1 Документация по обработке ошибок

2 ответа

Решение

Я наконец понял это. Я объявил enum ErrorType в классе общего доступа Objective-C с ранних времен.

typedef NS_ENUM(NSUInteger, ErrorType) {
   ...
};

Я ожидаю увидеть Redefined type error скорее, чем does not conform to protocol 'RawRepresentable'

Вы случайно не используете UserServicesError с классами какао? Если это так, то в подразделе " Использование ошибок" руководства Swift с какао и Objective-C предполагается, что его следует объявить так:

@objc enum UserServicesError: Int, ErrorType {
    case UserNotLogged
}

@objc обозначение необходимо для любых протоколов, которые взаимодействуют с объектами Какао Objective-C. В соответствии с Int (или какой-то другой RawRepresentable Соответствующий тип) получает вас RawRepresentable соответствие автоматически (вместо того, чтобы оставить его чистым Swift enum).

Надеюсь, это поможет. Если это произойдет, дайте мне знать, если это было одно, другое или оба необходимо исправить это. Мне любопытно.:-)

Другие вопросы по тегам