在 Xcode 7 中,Swift 无法自动完成 Objective-C 代码

In Xcode 7, Swift can't autocomplete Objective-C code

我在一个 Objective-C 项目中工作并试图介绍 Swift。我有桥接 headers 工作,以便代码编译,但是 Objective-C 类 的 none 被自动完成拾取。

我试过:

  1. 退出 Xcode / 重新启动计算机
  2. 正在删除位于 (~/Library/Developer/Xcode/DerivedData)
  3. 的 DerivedData 文件夹
  4. 正在删除位于 ~/Library/Caches/com.apple.dt.Xcode
  5. 的文件
  6. 正在更改模拟器类型

然而,这些建议对我没有用。

自动完成适用于 UIKit 等,以及我的其他 Swift 代码。只有桥接 header 公开的 Objective-C 代码不会自动完成。

有什么建议吗?

我想我明白了这一点:

我们的项目有多个target,大部分文件属于多个target。如果你想要自动完成,你正在导入的 header 必须在文件所属的每个目标的桥接 header 中导入。

当我在每个桥接 header 中导入我想要的 header 时,自动完成开始按预期工作。

更新:如果该设置适用于您的项目,您似乎可以合并为一个桥接 header。这样可以避免每次要添加导入时都必须更新多个 header。

我最近 运行 在一个大型 mostly-objc 项目中遇到了这个问题。希望这对某人有所帮助。

对我来说,自动完成之前在这个项目中一直有效,但后来开始对所有 objective c classes / 方法失败。该项目仍然编译没有问题。

我最终注释掉了桥接 header 中的所有现有导入,并添加了一个简单的测试 class,自动完成对其起作用。然后取消对其他每个导入的注释,直到我确定是哪一个导致了问题。

例如我的 header 基本上是这样的:

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

我这样做了:

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

当从 Swift 使用时,自动完成开始为 SimpleTestClass 工作。

然后开始从桥接 header 中取消注释其他 classes 直到它起作用。导致问题的导入是一些第三方框架,不确定为什么会导致问题,但我只是从那个特定的 header 中为我的 swift 代码提取了我需要的东西并单独导入它。

感谢 joel.d 的回答,我已经在我的项目中解决了同样的问题。

在桥接头中我有一行:

#import "BTData.h"

请注意,它是来自 cocoa pod 的一些 sdk,最近我们更新了所有 pods,所以可能这就是自动完成问题开始的时候。用下面这一行替换上面一行解决了这个问题,现在所有 obj-c 类 都在 swift 文件中自动完成。

#import <Braintree/BTData.h>