2014-09-12 3 views
5

내가 어떤 점에서 나는이 유사한 코드가 신속한 응용 프로그램을 개발하고 있어요에 대한 색인을 붙어 : 몇 가지 이유를 들어엑스 코드 베타 6.1 엑스 코드 (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가 멈추고 다른 것을 할 수 없습니다.

Activity Monitor를 열면 sourcekitservice와 swift가 100 % 이상의 CPU를 사용하여 표시됩니다.

나는 위의 코드와이 샘플 프로젝트를 만들었습니다 https://dl.dropboxusercontent.com/u/1393279/aaaaaaa.zip

를 I했습니다 이미 시도 그냥 작동하지 않는 등, 분을 기다리고, 재부팅, 엑스 코드를 다시 설치, 파생 데이터를 청소.

+0

저는 Xcode 6의 다양한 베타 버전을 15 초 동안 인덱싱에 사용했습니다. 때로는 짜증이 나고 일을 멈추고 곧 다시 일해야했습니다. 나는 GM 종자 (아직)에서이 문제를 보지 못했다. 부수적으로, 제목 "Xcode Beta 6.1"에서 ...? 아직 Xcode 6.1이 없습니다. – DBD

+2

예, 다음이 있습니다. https://developer.apple.com/xcode/downloads/ – Wak

+0

내 실수는 내가 바로 잡았습니다. – DBD

답변

18

비슷한 점이 몇 번 나에게 일어났습니다. 나는 긴 문장을으로 나누어 으로 해결했습니다.

놀이터에서 코드를 테스트 한 결과, SourceKitService 프로세스가 CPU의 100 %를 먹는 것을 즉시 알게되었습니다.

코드에서 가장 오래 걸리는 문장은 사전 초기화이므로 첫 번째 방법은 라인 당 짧은 항목 수로 변경하고 초기화하는 것입니다.

스위프트는 사전에 대한 += 연산자를 제공하지 않는다, 그래서 우리는 첫 번째 (@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 개 항목을 선택하십시오.

그러나 코드에서 당신은 불변으로 사전을 선언 - 스위프트 선언 후 불변을 초기화 할 수있는 설명을 제공하지 않습니다 - 다행히 우리는 그 달성하기 위해 폐쇄를 사용할 수 있습니다 : 내가했다

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

그것은 효과가 있었다. 감사. 처음으로 나는 이런 것을 본다. 스위프트는 아직 생산 준비가되어 있지 않습니다. – Wak

+1

Xcode 6.0.1에서 수정 되었습니까? 나는 아직도이 문제를 겪고있다. – zeeple

+2

Xcode 6.1로 마이그레이션 할 때 비슷한 점이있었습니다. 나는 약 35 줄의 코드를 취한 private let menuData = [[<< All My definitions >>]]와 같은 사전 목록 목록으로 정의 된 메뉴를 가지고있었습니다. Xcode는 "인덱싱 | 빠른 코드 컴파일"에서 CPU를 100 % 사용하여 신속하게 처리하고있었습니다. 대신 동적으로 메뉴의 작은 부분을 추가하여 해결되었습니다! 나는 Plist도 사용할 수 있었지만 이것이 중요한 것은 아닐 것입니다. –

2

을 같은 문제. 미리 컴파일 된 헤더 및 파생 된 데이터를 삭제하면 수정 된 것처럼 보였습니다. 영구적으로 문제를 해결할 지 확신 할 수 없지만 적어도 현재는 해결 중입니다.

+0

나를 위해 일했습니다. 고마워요. –