2014-10-20 3 views
0

Swift로 작성된 iOS 응용 프로그램에는 NSError에서 확장되는 Error 클래스가 있습니다.super.init 전에 init에서 classForCoder 호출

class MyError: NSError { 

    class var ErrorDomain: String { return "com.domain.app.error" } 
    class var ErrorCode: Int { return 0 } 

    init(data: [String: AnyObject]) { 
     let userInfo: [String: AnyObject] = [ 
      "data": data 
     ] 
     super.init(
      domain: self.classForCoder.ErrorDomain, 
      code: self.classForCoder.ErrorCode, 
      userInfo: userInfo 
     ) 
    } 

    [...] 

} 

는 또한 위의 하나에서 확장 다른 오류 클래스가 있습니다

class MyError2: MyError { 

    override class var ErrorDomain: String { return "com.domain.app.error2" } 
    override class var ErrorCode: Int { return 0 } 

    [...] 

} 

내가 MyError 클래스에서 초기화를 사용하고 서브 클래 싱 된 오류 객체에 대한 사용자 정의 도메인과 코드를 가질 수있는 방법입니다.

Xcode 6.0.1에서 제대로 작동했습니다. 문제는 Xcode 6.1에서 컴파일되지 않는다는 것입니다. 나는 라인에 MyError 클래스에서이 컴파일러 오류 : 기본 오브젝트의 특성 'classForCoder'의

[...] 
domain: self.classForCoder.ErrorDomain, 
code: self.classForCoder.ErrorCode, 
[...] 

사용는 super.init이 initClass 개체를 가져 그것을

을 것이 가능 초기화하기 전에 super.init으로 전화하기 전에? 이상하게 들릴 수도 있지만, 필자는 필자에게 필자가 필자에게 필자가 필자에게 필자가 필자에게 필자가 필요로하는 이유를 보여주고 있다고 생각한다

답변

0

super.init()을 호출하기 전에 모든 인스턴스 속성을 초기화해야합니다.

하지만 종류의 값을 전달하기 때문에 당신은 단순히 분명히 작동 할 수

super.init(
     domain: MyError.ErrorDomain, 
     code: MyError.ErrorCode, 
     userInfo: userInfo 
    ) 
+0

작성할 수 있습니다. 불행하게도, init이'MyError2'에서 호출 될 때, 새로운 객체는 MyError2 클래스 대신에 MyError로부터 도메인과 코드를 가질 것입니다. 내가 맞습니까? – Darrarski

+0

네, 당신 말이 맞습니다. 죄송합니다, 그것에 대해 생각하지 않았습니다. – marcusficner

관련 문제