Swift 3(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)
に実装し、生成されたメソッドを定義しようとすると、次のようなエラーが発生し続けます:cannot convert _Error to NSError
_。このエラーを修正する方法がわかりません。誰か提案してもらえますか?
これはXcode8のSourceKitのバグだと思います。Xcode8.1および8.2ベータ2の時点で、プロトコル関数にはNSError
パラメータが含まれていますSwift 3 as Error
:
extension MyClass: AProtocolDeclaration {
func someEventHappened(_ error: Error?) {
print(error ?? "none")
}
}