在尝试迁移到Swift 3时(在包含大约一半/半swift / objective-c代码的项目中),我遇到了一个问题。我们在objective-c中声明这个特定协议,如下所示:
if groups[1] != '':
phoneNum = ' '.join(groups[1].lstrip('(').rstrip(')'), groups[3])
else:
phoneNum = groups[3]
Swift编译器为上面的协议声明生成以下内容:
@protocol AProtocolDeclaration <NSObject>
- (void)someEventHappened:(nullable NSError *)error;
@end
当在public protocol AProtocolDeclaration : NSObjectProtocol {
public func someEventHappened(_ error: Error?)
}
中实现协议并尝试定义生成的方法时,我会继续收到类似的错误:无法转换concrete class (in swift)
。我不知道如何解决这个错误。请问有人建议吗?
答案 0 :(得分:0)
我认为这是Xcode 8中的SourceKit的一个错误。从Xcode 8.1和8.2 beta 2开始,包含NSError
参数的协议函数被正确地桥接到Swift 3 Error
:
extension MyClass: AProtocolDeclaration {
func someEventHappened(_ error: Error?) {
print(error ?? "none")
}
}