2015-11-05 47 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>