2016-06-08 4 views
1

완전히 새로운 Xcode 프로젝트에서 발생합니다. 즉시 나는 연기 추가로,Swift 'defer'키워드로 인해 세그먼트 화 오류가 발생합니다.

class CIHomeView: UIView { 
init() { 
    super.init(frame: CGRectZero) 
    print("test") 
} 

그러나 :

class CIHomeView: UIView { 
init() { 
    defer { super.init(frame: CGRectZero) } 
    print("abc") 
} 

내가 세그먼트 오류가 오류를 컴파일 얻을를 내가 추가 첫 번째 클래스는 다음과 같이 작동합니다 UIView의 서브 클래스입니다. 또한 Xcode의 구문 강조 기능이 일시적으로 작동하지 않습니다. 아주 이상한. 필자의 이해는 지연 2.0이 Swift 2.0에서 사용 가능하다는 것이며, 실제로 Swift 2.2를 실행 중입니다.

답변

1

deferinit 방법에서는 불법입니다. 컴파일러는 당신에게 그렇게 말하고 싶지만 그렇게하기 전에 충돌하고 있습니다.

다음에 Swift 3을 반복 할 때이 문제를 해결하고 적절한 이유가 있기 때문에 특정 상황에서 defer이이 상황에서 작동하도록하는 제안이 있습니다. 그러나 그때까지는하지 마십시오. 이 완전히 일이 초기화 중에 수행해야하는 순서에 대한 규칙을 물리 칠 것 같은

님 확실히 그러나, 당신의 defersuper를 호출 할 수 없습니다 않습니다. 당신이하려는 특정 일은 끔찍한 생각입니다. 컴파일러는 안전하고 일관된 방식으로 초기화 규칙을 알고 있습니다. 컴파일러에 귀 기울이십시오.