Xcode挂起“编译Swift源文件”

问题描述 投票:11回答:11

我正在运行Xcode 7.3.1。在构建基于Swift的项目时,它会挂起“编译Swift源文件”。我已尝试删除DerivedData,清理,运行,重新启动Xcode,重新启动OS X的各种组合,似乎没有工作。有任何想法吗?

ios xcode swift xcode7
11个回答
15
投票

我做了一个课程扩展自己。这也导致Swift编译器陷入循环而没有错误:

class X: X

0
投票

在我的情况下,XCode卡在大字典文字上:

requestParameters = [
                        "asset" : "...",
                        "user" : "...",
                        // about 15 additional keys
                        ]

更换此部件后,问题已解决:

var requestParameters = [String : Any]()
requestParameters["asset"] = "..."
requestParameters["user"] = "..."
// about 15 additional keys

0
投票

所以我相信在大多数情况下它是众所周知的字典文字型干扰问题。

像这样的代码:

 let params = [
                "title": title, "desc": desc, "velikost": velikost,
                "cena": cena, "vykon": vykon, "telefon": telefon,
                "rokVyroby": rokVyroby, "stkDo": stkDo,
                "zemePuvodu": zemePuvodu, "najetoKilometru": najetoKilometru,
                "stav": stav, "ZnackaId": znackaId,
                "VyrobceId": vyrobceId,
                "category": categoryId, "subCategory": subCategoryId,
                "modely[]": modelId, "prodejNakup": prodejNakup,
                "mena": mena, "isNovy": isNovy, "serviska": serviska,
                "abs": abs, "technicak": technicak,
            ]

必须写得更好总是这样:

let params: [String: String] = [
                "title": title, "desc": desc, "velikost": velikost,
                "cena": cena, "vykon": vykon, "telefon": telefon,
                "rokVyroby": rokVyroby, "stkDo": stkDo,
                "zemePuvodu": zemePuvodu, "najetoKilometru": najetoKilometru,
                "stav": stav, "ZnackaId": znackaId,
                "VyrobceId": vyrobceId,
                "category": categoryId, "subCategory": subCategoryId,
                "modely[]": modelId, "prodejNakup": prodejNakup,
                "mena": mena, "isNovy": isNovy, "serviska": serviska,
                "abs": abs, "technicak": technicak,
            ]

但我相信即使是更短的文字也是问题,并且通过等待构建来节省时间,最好总是为字典文字定义类型,这样编译器就不必自己找出,因为他显然很挣扎。 PS:我认为苹果工程师在那里有一些严重的个人问题,他们不得不聘请一些来自Jatbrains或者甚至是我的人;)专注于重要的事情而不是浪费时间讨论Swift如何与其他人区别开来......


7
投票

感谢所有评论员的建议。我将它缩小到map的闭包,引用了我删除的属性。例:

var people: [Person] = ...
let foo = people.map { "\($0.name), \($0.age)" }

其中Person看起来像:

protocol Person {
    var name: String { get }
    var age: Int { get }
}

一切正常。然后我删除了age,同时保持关闭不变。这导致Xcode变得无可救药地混淆。可能与Swift的类型推断有关。


6
投票

尝试清理Project Build Folder

  1. 按住选项键并进入产品 - >清洁构建文件夹(清除以前在菜单中)
  2. 如果您正在使用CocoaPods删除您的Workspace文件并运行Pod InstallPod Update

我认为2可能是原因。


6
投票

将构建设置中的“Swift编译器优化级别”从“整个模块优化”更改为“单个文件优化”。这可能不是你的问题,但它解决了我的问题,我被困了半天。它可能只是最近Xcode版本中的一个临时错误(8.2.1是我在撰写本文时使用的那个)。


4
投票

我有同样的问题。在我的情况下,它似乎是应用太多零合并操作的结果。我正在构建一个json项目:

json = [ "item1": value1 ?? "",
         "item2": value2 ?? "",
         "item3": value3 ?? "",
         ...
         "item14": value14 ?? "" ]

这不会编译。当我删除所有nil合并,使它看起来像下面,它编译得很好。

json = [ "item1": value 1,
         "item2": value 2,
         "item3": value 3,
         ...
         "item14": value 14 ]

我没有试图找出卡住之前物品数量的截止点。


3
投票

编译时间极长似乎有各种可能的原因。角落或边缘的情况无处不在。因此,最好的方法是观察和调查自己的案例。

虽然在评论中被其他人提及,但下面的步骤仍然值得更多关注:

  1. 运行项目
  2. 切换到Report Navigator(命令+ 9),然后选择当前运行的Build任务。查看哪个源文件占用了大量编译时间。
  3. 检查该源文件的最近提交历史记录。调查可能的原因。

2
投票

在我的情况下,问题是在JSON解析期间。我在JSON解析期间在字典参数中发送了一个可选值。


1
投票

看着Report Navigator帮我找到问题所在。在我的例子中,问题是我试图将自动布局约束添加到UITableView中以UITableViewController编程方式添加的子视图。


0
投票

xcode似乎连接超过5个字符串的问题。看到这个:Xcode freezes when trying to execute this in a Swift playground?给定的解决方法解决了我的问题

© www.soinside.com 2019 - 2024. All rights reserved.