Xcode Beta 6.1和Xcode 6 GM因为奇怪的原因卡住了索引

我正在开发一个快速的应用程序,在某些时候我有一个类似于这样的代码:

import UIKit class ViewController: UIViewController { private var a: UIImageView! private var b: UIImageView! private var c: UILabel! private var d: UILabel! private var e: UILabel! private var f: UILabel! private var g: UIView! private var h: UIView! private var i: UIView! private var j: UIView! private var k: UIImageView! private var l: UIView! private var m: UIView! private var n: UIView! private var o: UIView! private var p: UIScrollView! private var q: UIView! override func viewDidLoad() { super.viewDidLoad() let viewBindingsDict = ["a" : a, "b" : b, "c" : c, "d" : d, "e" : e, "f" : f, "g" : g, "h" : h, "i" : i, "j" : j, "k" : k, "l" : l, "m" : m, "n" : n, "o" : o, "p" : p] } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } } 

出于某种原因,当我添加这个代码时,xcode卡住了,我什么也做不了。

打开活动监视器,它显示sourcekitservice和迅速使用超过100%的CPU。

我已经用上面的代码创build了这个示例项目: https : //dl.dropboxusercontent.com/u/1393279/aaaaaaa.zip

我已经尝试清理派生的数据,重新安装Xcode,重新启动,等待几分钟等。它只是不工作。

有几次类似的事情发生在我身上,我通过将多条语句分成多行来解决这个问题。

我在游乐场testing了你的代码,我立即注意到SourceKitService进程占用了我100%的CPU。

在你的代码中,我看到的最长的语句是字典的初始化,所以第一种方法是使它变为可变的,并用每行的短数目来初始化。

Swift不为字典提供+=运算符,所以我们首先需要一个( 赞成@shucao ):

 func +=<K, V> (inout left: Dictionary<K, V>, right: Dictionary<K, V>) -> Dictionary<K, V> { for (k, v) in right { left.updateValue(v, forKey: k) } return left } 

在你的工具集中,你可以如下初始化字典:

 var viewBindingsDict = ["a" : a, "b" : b, "c" : c, "d" : d, "e" : e] viewBindingsDict += ["f" : f, "g" : g, "h" : h, "i" : i, "j" : j] viewBindingsDict += ["k" : k, "l" : l, "m" : m, "n" : n, "o" : o] viewBindingsDict += ["p" : p] 

每行最多select5个项目。

但是在你的代码中,你把字典声明为不可变的 – swift在声明后没有提供任何声明来初始化一个不可变的variables – 幸运的是,我们可以使用闭包来实现:

 let viewBindingsDict = { () -> [String:UIView] in var bindings = ["a" : self.a, "b" : self.b, "c" : self.c, "d" : self.d, "e": self.e] bindings += ["f": self.f, "g" : self.g, "h" : self.h, "i" : self.i, "j" : self.j] bindings += ["k" : self.k, "l" : self.l, "m" : self.m, "n" : self.n, "o" : self.o] bindings += ["p": self.p] return bindings }() 

我有同样的问题。 删除预编译的头文件和派生的数据似乎解决了这个问题。 我不确定这是否会永久性地解决问题,但现在至less在工作。