2015-11-05 16 views
5

私はObjective-CプロジェクトでSwiftを紹介しようとしています。コードがコンパイルされるようにブリッジヘッダーが用意されていますが、Objective-Cクラスはオートコンプリートで選択されていません。Xcode 7では、SwiftがObjective-Cコードをオートコンプリートできません

私が試してみた:

  1. 辞職Xcodeの/コンピュータを再起動する
  2. (〜/ライブラリ/開発/ Xcodeの/ DerivedData)
  3. /〜/ライブラリにファイルを削除するにDerivedDataフォルダを削除しますキャッシュ/ com.apple.dt.Xcode
  4. しかしシミュレータの種類

を変更し、これらの提案は私のために動作しませんでした。

オートコンプリートは、UIKitなど、および他のSwiftコードでうまく機能します。ブリッジングヘッダーによって公開されるObjective-Cコードは、自動完成しません。

提案がありますか?

+0

コンパイルして実行しますか? – Darko

+0

ええ、コンパイルして正常に動作します。 – Wyatt

+0

さて、私はマシン上で試してみましたが、うまくいくはずです。時々Xcodeはオートコンプリートについておもしろく、たぶんあなたのコンピュータを再起動します(それは常に問題を修正します:)) – Alex

答えて

5

私は、私はこの1つを考え出したと思う:

を私たちのプロジェクトは、複数のターゲットを持っており、ほとんどのファイルが複数のターゲットに属しています。オートコンプリートが必要な場合は、インポートするヘッダーを、ファイルが属するすべてのターゲットのブリッジヘッダーにインポートする必要があります。

各ブリッジヘッダーに必要なヘッダーをインポートしたとき、オートコンプリートが期待通りに機能し始めました。

更新:その設定がプロジェクトに有効な場合、ブリッジヘッダーを1つにまとめることができるようです。これにより、インポートを追加するたびに複数のヘッダーを更新する必要がなくなります。

1

私は最近、大部分のobjcプロジェクトでこの問題に直面しました。うまくいけば、これは誰かに役立ちます。

私にとって、このプロジェクトではオートコンプリートが以前から働いていましたが、すべての客観的なクラス/メソッドで失敗し始めました。プロジェクトはまだ問題なしでコンパイルされました。

ブリッジヘッダーにある既存のインポートをすべてコメントアウトし、シンプルなテストクラスを追加しました。このクラスでは、自動補完が機能しました。次に、問題の原因となったものを切り離すまで、他の各インポートのコメントを外します。

は、例えば私のヘッダは基本的にはこのように見えた:

#import "MyClass.h" 
#import "MyOtherClass.h" 
#import "SomeThirdPartyModule.h" 
etc... 

私はこれをしなかった:

#import "SimpleTestClassWithOneMethod.h" 
// #import "MyClass.h" 
// #import "MyOtherClass.h" 
// #import "SomeThirdPartyModule.h" 

そして、オートコンプリートがスウィフトから使用された場合SimpleTestClassのために働き始め。

その後、ブリッジヘッダーから他のクラスのコメントを解除してから機能させるようになりました。問題の原因となったインポートは、なぜサードパーティーのフレームワークであったのですか。なぜ問題が発生したのかわかりませんが、その特定のヘッダーから必要なコードを素早く抜き出し、別々にインポートしました。

2

joel.dのおかげで、私のプロジェクトで同じ問題が解決しました。

は、ブリッジング・ヘッダーで、私はラインを持っていた:

#import "BTData.h" 

それはココアポッドからいくつかのSDKだったことに注意してください、そして最近では、我々はすべてのポッドを更新しているので、自動補完の問題が開始されたとき、おそらくthatsのしてください。上記の行を以下の行に置き換えると、問題が修正され、すべてのobj-cクラスが即時ファイルで自動完成します。

#import <Braintree/BTData.h> 
関連する問題