Подтвердить что ты не робот

Ошибка преобразования 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. Я не уверен, как исправить эту ошибку. Может ли кто-нибудь предложить?

4b9b3361

Ответ 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")
    }
}