Xcode 7.3 Swift的语法突出显示和代码完成问题

时间:2016-03-22 21:46:51

标签: ios xcode swift xcode7.3

我对XCode 7.3有一个非常令人沮丧的问题(但是,这个问题在我安装XCode 7.2后仍然存在)和Swift代码,我希望其他人有这个问题并且知道如何解决它。语法高亮和代码完成在Objective-C文件中完美地工作,并且在Swift代码中调用其他Swift对象时也可以正常工作。但是,Swift代码中提到的任何Objective-C对象或方法都没有语法高亮,并且XCode不会完成任何Objective-C声明的方法或属性。一切都编译好,运行得很好。

我还应该补充一点,我也尝试过彻底清理XCode。我删除了所有派生数据,删除了所有XCode缓存,并删除了我的XCode首选项文件(除了在重新安装之前显然删除了XCode.app存档)。

在Swift中开发非常困难。我不想这样做,但如果我找不到解决方法,我将被迫回到使用Objective-C。

5 个答案:

答案 0 :(得分:21)

我有同样的问题。但终于解决了它。 我做了两个改变,不知道哪个是关键点,但你可以尝试所有。

  1. 删除模块缓存
  2.   

    在与项目的派生数据相同的文件夹中是一个模块   缓存。当代码完成停止工作时,删除它修复它。

         

    关闭Xcode 并删除   〜/ Library / Developer / Xcode / DerivedData / ModuleCache 目录。

    1. 更改启用模块值
    2.   

      转到目标的构建设置,然后搜索启用   模块

           

      如果,请将其更改为,您可能会获得一些构建   错误,只需将其更改回

      完成上述两个步骤后,您应该清理(Shift + Command + K)您的项目。

      现在您可以解决问题。

答案 1 :(得分:8)

所以似乎问题出在CocoaPods上。我使用Cocoapods作为静态库而不是框架。切换到框架(在我的Podfile中使用use_frameworks!)并将库导入Swift已经解决了我的所有问题。我猜测所有这些第三方库标题对于XCode来说太过分了。无论哪种方式,问题现在都已解决。我希望这有助于将来的某个人。

答案 2 :(得分:6)

这可能不再需要,但我仍想发布:

在本文发表时,最新版本的cocoapods(1.0.0.beta.8)要求您为每个Xcode目标定义pod。

就我而言,我有一个针对项目目标和测试目标的类编译。由于懒惰,我只向主要目标添加了一个吊舱。

现在使用类A的代码我使用import NAME添加了pod框架,并尝试使用框架的类。 Xcode不会突出显示我使用新类的特定代码,但编译和运行工作正常。在完成对话框中,变量的类型为<<error type>>

解决此问题的方法:在Podfile中将新添加的pod添加到所有目标,类A是其成员。

现在Xcode为所有目标找到了必要的框架,代码突出显示再次起作用。

编辑1:

一种可能的解决方案是定义共享pod的列表,如我的示例所示:

platform :ios, '8.4'
use_frameworks!
inhibit_all_warnings!

def all_pods
    pod 'MPMessagePack'
    pod 'SwiftyDispatch'
    pod 'BFKit'
    pod 'Timepiece'
    pod 'Alamofire'
    pod 'AlamofireSwiftyJSON'
end

def testing_pods
    pod 'Quick'
    pod 'Nimble'
end

target 'App' do
    all_pods
end

target 'AppLogicTests' do
    all_pods
    testing_pods
end

target 'AppUITests' do
    pod 'RxTest'
    all_pods
    testing_pods
end

post_install do |installer|
    installer.pods_project.targets.each do |target|
        puts target.name
    end
end

这会将所有pod添加到所有目标,并将所有测试pod添加到目标。在这些旁边,我向AppUITests添加了“RxTest”。

(选择的豆荚是我的项目的例子,没有广告意图:-))

答案 3 :(得分:3)

我们在混合的ObjC / Swift项目中遇到了同样的问题。尝试了删除派生数据等所有建议,但无济于事。有时它有所帮助,但不是以可重复的方式,并在一段时间后停止工作。 在这篇文章中,高尔文的帖子让我走上了与模块相关的构建设置的轨道。然而,另一个设置以可重现的方式解决了代码完成/着色:将DEFINES_MODULE(在Packaging下)从YES设置为NO为我们的主项目是解决方案。

注意:

答案 4 :(得分:0)

如果以上都不适用于你并且你正在使用Cocoapods,你可以尝试切换到Carthage。

我尝试了在Google上找到的所有建议都无济于事。但是Cocoapods似乎一直在出现,因为许多黑客试图修复它。我一直在阅读Carthage,以及它如何不修改你的项目,强迫你使用工作区,或者可能用头文件填充你的构建文件夹(这会混淆Xcode并导致语法高亮和自动完成中断)。

在进行切换之后,我还没有遇到任何问题,说实话,我更倾向于花费很少的开销来获得一个干净的解决方案。 This post我真的开车回家了。