私の状況は以下の通りです:のObj-C Cocoapod APIは、スウィフトに消費されるために得る3.0アプリケーション
私はSDKのObj-Cで書かれており、Cocoapodとして配布しています。現在、私のユーザーと私のユーザーのアプリケーションによって消費されています。私のアプリは主にSwiftに書かれています。私のSDKや他のサードパーティ製のpod
がフレームワークとしてエクスポートされていないので、ブリッジヘッダーを使ってポッドを消費します。のuse_frameworks!
の使用は機能しません。
私はXcode 8移行ツールを使用して自分のアプリをSwift 3.0に移行しましたが、現在はCocoapod SDKに対してコンパイルされません。例えば
- 私のSDKへの移行後のコール:
SparkCloud.sharedInstance().getDevices({ (devices:[Any]?, error:Error?) -> Void in ...
以下のコンパイル時にエラーが発生します。
NSErrorが今エラーと型なしNULL可能にNSArrayであるので、理にかなってCannot convert value of type '([AnyObject]?, NSError?) -> Void' to expected argument type '(([Any]?, Error?) -> Void)?'
Obj-cから[Any]に解決されましたが、私のSDKには反映されていません。
のObj-C SDK関連の行は次のとおりです。
-(NSURLSessionDataTask *)getDevices:(nullable void (^)(NSArray * _Nullable sparkDevices, NSError * _Nullable error))completion;
私のObj-C関数ヘッダーにNS_REFINED_FOR_SWIFT
を追加し、スウィフト3.0に「右」のインターフェイスを公開するためのラッパースウィフトファイルを書き込もうとしましたが、私はSDKがCocoapodライブラリ(フレームワークではない)であることと、podspec
ファイルを修正する方法を考慮して、この新しいSwiftの「ヘッダ」ファイルをパッケージ化して消費する方法に困惑しています。
ヘルプ/ヒント/指示をいただければ幸いです。
問題のポッドのビルド設定を確認し、 'legacy swiftを使用する'がfalse/offに設定されているかどうかを確認してください。 – Multinerd
swift3の 'Any'と' AnyObject'に何らかの変更があります。 –