Ошибка преобразования Swift 3/NSError
При попытке перейти на Swift 3 (в проекте, который содержит примерно половину/половину быстрого / objective-c кода), я столкнулся с проблемой. Мы объявляем этот конкретный протокол в objective-c следующим образом:
@protocol AProtocolDeclaration <NSObject>
- (void)someEventHappened:(nullable NSError *)error;
@end
Компилятор Swift генерирует следующее для объявления протокола выше:
public protocol AProtocolDeclaration : NSObjectProtocol {
public func someEventHappened(_ error: Error?)
}
И при реализации протокола в concrete class (in swift)
и попытке определить сгенерированный метод, я все время получаю ошибку: невозможно преобразовать Error to NSError
. Я не уверен, как исправить эту ошибку. Может ли кто-нибудь предложить?
Ответы
Ответ 1
Я думаю, что это была ошибка с SourceKit в Xcode 8. Как и Xcode 8.1 и 8.2 beta 2, функции протоколов содержат параметры NSError
, правильно настроенные для Swift 3 как Error
:
extension MyClass: AProtocolDeclaration {
func someEventHappened(_ error: Error?) {
print(error ?? "none")
}
}