的Xcode 6.1测试版和Xcode的6 GM卡索引用于奇怪的原因
我正在开发一个应用程序迅速,在某些时候,我有一个类似的代码:的Xcode 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和swift使用超过100%的CPU。
我已经创建了上面的代码此示例项目:https://dl.dropboxusercontent.com/u/1393279/aaaaaaa.zip
我已经尝试过清理得出的数据,重新安装的Xcode,重新启动,等待几分钟,等这是行不通的。
同样的事情也发生在我身上了几次,我通过分裂长语句分成多行解决它。
我在操场上测试了你的代码,我立即注意到SourceKitService进程占用了我100%的CPU。
在你的代码中,我看到的最长的语句是字典初始化,所以第一种方法是使它变为可变的并用每行的短数量的项目进行初始化。
斯威夫特不提供+=
运营商的字典,所以我们首先需要一个(荣誉给@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]
每行最多选择5项。
但在你的代码中声明的字典作为不可改变的 - SWIFT不提供任何声明它的声明后,初始化一个不变的 - 幸运的是我们可以使用闭包来实现这一目标:
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
}()
它工作。谢谢。我第一次看到这样的事情。 Swift显然还没有准备好生产。 – Wak 2014-09-21 02:43:48
这是在XCode 6.0.1中修复的吗?我仍然遇到这个问题。 – zeeple 2014-10-01 05:16:19
迁移到Xcode 6.1时,我有类似的事情。我有一个定义为字典列表的列表,比如private let menuData = [[>]],大约需要35行代码。 Xcode在快速处理过程中以100%的CPU挂在“索引|编译Swift代码”。通过动态添加菜单的小部分来修正!我想我也可以使用Plist,但这不是重点。 – 2014-11-02 01:40:51
我有同样的问题。删除预编译头文件和派生数据似乎可以解决这个问题。我不确定这是否会永久性地解决问题,但至少现在它至少可以工作。
为我工作,谢谢。 – 2015-03-06 08:36:12
我已经有Xcode 6的各种测试版挂在索引15秒左右。偶尔我会很生气,停止工作,并再次尝试立即工作。我还没有看到转基因种子的问题。在附注中,标题为“Xcode Beta 6.1”......是吧?目前还没有Xcode 6.1。 – DBD 2014-09-12 14:55:45
是的,那里是:https://developer.apple.com/xcode/downloads/ – Wak 2014-09-12 15:23:41
我的错误我站在纠正。 – DBD 2014-09-12 15:31:15