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

aes*_*eis 37 xcode ios 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.

Gal*_*vin 21

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

  1. 删除模块缓存

在与项目的Derived Data相同的文件夹中是模块缓存.当代码完成停止工作时,删除它修复它.

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

  1. 更改启用模块值

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

如果,则将其更改为,您可能会遇到一些构建错误,只需将其更改回" 是".

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

现在您可以解决问题.

  • 不幸的是,这些技巧似乎都没有对我有用.谢谢你的努力,我相信这可能会帮助别人. (2认同)

aes*_*eis 8

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

  • 抱歉让人失望.但这不是一个cocoapods问题.我可以用权威来说这个,因为我在一个纯粹的Objective-C项目中有同样的问题,我不会在我的任何项目中使用可可豆荚,也永远不会. (2认同)
  • @drekka有几个原因可以发生此错误,我的答案只是解决了我的具体问题的解决方案.我建议你阅读其他答案,看看他们是否有任何帮助.这个问题也与Swift有关.如果您不使用Swift,则anwers可能不适用于您.祝你好运. (2认同)

Phi*_*der 6

这可能不再是必要了,但我仍想发布这个:

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

在我的例子中,我有一个针对项目目标和测试目标的类编译.由于懒惰,我只向主要目标添加了一个吊舱.

现在在类的代码中工作A我添加了pod框架import NAME并尝试使用框架的类.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
Run Code Online (Sandbox Code Playgroud)

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

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