Swift 3 次转化 Error/NSError

Swift 3 conversion Error/NSError

在尝试迁移到 Swift 3(在一个包含大约 half/half swift/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。我不确定如何修复此错误。有没有人可以推荐一下?

我认为这是 Xcode 8 中 SourceKit 的错误。从 Xcode 8.1 和 8.2 beta 2 开始,包含 NSError 参数的协议函数已正确桥接到 Swift 3 作为 Error:

extension MyClass: AProtocolDeclaration {
    func someEventHappened(_ error: Error?) {
        print(error ?? "none")
    }
}