Xcode Beta 6.1 y Xcode 6 GM atascaron la indexación por razones extrañas

Estoy desarrollando una aplicación rápida que en algún momento tengo un código similar al siguiente:

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. } } 

Por alguna razón, cuando agrego este código, xcode se atasca y no puedo hacer nada más.

Al abrir Activity Monitor, muestra sourcekitservice y swift usando más de 100% de CPU.

Creé este proyecto de muestra con el código anterior: https://dl.dropboxusercontent.com/u/1393279/aaaaaaa.zip

Ya he intentado limpiar datos derivados, volver a instalar Xcode, reiniciar, esperar minutos, etc. Simplemente no funciona.

Algo similar me pasó algunas veces, y lo resolví dividiendo declaraciones largas en múltiples líneas .

Probé tu código en un patio de recreo e inmediatamente noté que el proceso SourceKitService consumía el 100% de mi CPU.

En su código, el enunciado más largo que veo es la inicialización del diccionario, por lo que un primer enfoque sería hacerlo mutable e inicializar con un número corto de elementos por línea.

Swift no proporciona un operador += para los diccionarios, por lo que primero necesitamos uno (felicitaciones a @shucao ):

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

Con eso en su conjunto de herramientas, puede inicializar el diccionario de la siguiente manera:

 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] 

elegir un máximo de 5 artículos por línea.

Pero en tu código declaraste el diccionario como inmutable, swift no proporciona ningún enunciado para inicializar un inmutable después de su statement, afortunadamente podemos usar un cierre para lograrlo:

 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 }() 

Yo tuve el mismo problema. Eliminar los encabezados precomstackdos y los datos derivados parecía solucionarlo. No estoy seguro de si eso lo arreglará de forma permanente, pero al menos funciona por ahora.