我正在运行Xcode 7.3.1。在构建基于Swift的项目时,它会挂起“编译Swift源文件”。我已尝试删除DerivedData
,清理,运行,重新启动Xcode,重新启动OS X的各种组合,似乎没有工作。有任何想法吗?
我做了一个课程扩展自己。这也导致Swift编译器陷入循环而没有错误:
class X: X
在我的情况下,XCode卡在大字典文字上:
requestParameters = [
"asset" : "...",
"user" : "...",
// about 15 additional keys
]
更换此部件后,问题已解决:
var requestParameters = [String : Any]()
requestParameters["asset"] = "..."
requestParameters["user"] = "..."
// about 15 additional keys
所以我相信在大多数情况下它是众所周知的字典文字型干扰问题。
像这样的代码:
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如何与其他人区别开来......
感谢所有评论员的建议。我将它缩小到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的类型推断有关。
尝试清理Project Build Folder
Pod Install
或Pod Update
我认为2可能是原因。
将构建设置中的“Swift编译器优化级别”从“整个模块优化”更改为“单个文件优化”。这可能不是你的问题,但它解决了我的问题,我被困了半天。它可能只是最近Xcode版本中的一个临时错误(8.2.1是我在撰写本文时使用的那个)。
我有同样的问题。在我的情况下,它似乎是应用太多零合并操作的结果。我正在构建一个json项目:
json = [ "item1": value1 ?? "",
"item2": value2 ?? "",
"item3": value3 ?? "",
...
"item14": value14 ?? "" ]
这不会编译。当我删除所有nil合并,使它看起来像下面,它编译得很好。
json = [ "item1": value 1,
"item2": value 2,
"item3": value 3,
...
"item14": value 14 ]
我没有试图找出卡住之前物品数量的截止点。
编译时间极长似乎有各种可能的原因。角落或边缘的情况无处不在。因此,最好的方法是观察和调查自己的案例。
虽然在评论中被其他人提及,但下面的步骤仍然值得更多关注:
Build
任务。查看哪个源文件占用了大量编译时间。在我的情况下,问题是在JSON解析期间。我在JSON解析期间在字典参数中发送了一个可选值。
看着Report Navigator帮我找到问题所在。在我的例子中,问题是我试图将自动布局约束添加到UITableView
中以UITableViewController
编程方式添加的子视图。
xcode似乎连接超过5个字符串的问题。看到这个:Xcode freezes when trying to execute this in a Swift playground?给定的解决方法解决了我的问题