我对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。
答案 0 :(得分:21)
我有同样的问题。但终于解决了它。 我做了两个改变,不知道哪个是关键点,但你可以尝试所有。
在与项目的派生数据相同的文件夹中是一个模块 缓存。当代码完成停止工作时,删除它修复它。
关闭Xcode 并删除 〜/ Library / Developer / Xcode / DerivedData / ModuleCache 目录。
转到目标的构建设置,然后搜索启用 模块强>
如果是,请将其更改为否,您可能会获得一些构建 错误,只需将其更改回是。
完成上述两个步骤后,您应该清理(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我真的开车回家了。