2015-11-05 42 views
5

我正在Objective-C項目中工作並嘗試引入Swift。我有橋接頭文件工作,以便代碼編譯,但是沒有任何Objective-C類被自動完成拾取。在Xcode 7中,Swift無法自動完成Objective-C代碼

我已經試過:

  1. 退出Xcode中/重新啓動計算機
  2. 刪除DerivedData在文件夾(〜/資源庫/開發/ Xcode中/ DerivedData)
  3. 刪除文件在〜/庫/緩存/ com.apple.dt.Xcode
  4. 更改仿真類型

然而,這些建議並沒有爲我工作。

自動完成適用於UIKit等,以及我的其他Swift代碼。它只是橋接頭暴露的Objective-C代碼,不會自動完成。

有什麼建議嗎?

+0

它編譯和運行? – Darko

+0

是的,它會編譯並運行良好。 – Wyatt

+0

嗯,我只是在我的機器上試過了,我可以告訴你它應該工作;有時Xcode有趣的自動完成,也許重新啓動您的計算機(總是修復的東西,對吧?:)) – Alex

回答

5

我想我想通這一個:

我們的項目有多個目標,大多數的文件屬於多個目標。如果您想自動完成,那麼您要導入的標題必須導入到文件所屬的每個目標的橋接標頭中。

當我在每個橋接報頭中導入我想要的報頭時,自動完成按預期開始工作。

更新:似乎你可以合併到一個橋接頭如果該設置適用於您的項目。這會阻止您每次需要添加導入時更新多個標頭。

1

我最近遇到了一個大多數objc項目的問題。希望這有助於某人。

對我來說,autocomplete在這個項目中一直工作,但後來開始對所有客觀的c類/方法失敗。該項目仍然編譯沒有問題。

我最終註釋掉橋接頭中的所有現有導入,並添加了一個簡單的測試類,自動完成工作。然後取消每個其他進口的註釋,直到我隔離哪一個導致問題。

例如我的頭基本上是這樣的:

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

我這樣做:從斯威夫特使用時

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

和自動完成開始爲SimpleTestClass工作。

然後從橋接頭開始取消註釋其他類,直到它工作。導致問題的導入是一些第三方框架,不知道爲什麼它導致了一個問題,但我只是從我的swift代碼的特定頭文件中提取出需要的內容並單獨導入。

2

感謝joel.d回答,我在我的項目中解決了同樣的問題。

在橋接頭我行:

#import "BTData.h" 

請注意,它是從可可豆莢一些SDK,最近我們已經更新了所有的豆莢,所以可能這就是當自動完成的問題已經開始。用上面的代替上面的代碼解決了這個問題,現在所有obj-c類都在swift文件中自動完成。

#import <Braintree/BTData.h>