簡體   English   中英

在super.init之前的init中調用classForCoder

[英]Calling classForCoder in init before super.init

在我用Swift編寫的iOS應用程序中,我有一個Error類,該類從NSError擴展而來。

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類中的init,並為子類化的錯誤對象提供自定義域和代碼。

在Xcode 6.0.1上運行良好。 問題是,它不會在Xcode 6.1中編譯。 我在MyError類的以下行中收到此編譯器錯誤:

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

在super.init對其進行初始化之前,在基礎對象中使用屬性'classForCoder'

可以在調用super.init之前在init獲取Class對象嗎? 我知道這聽起來很奇怪,但是我認為我的例子說明了為什么需要它。

您必須在調用super.init()之前初始化所有實例屬性。

但是,由於您要傳遞類型屬性的值,因此您可以簡單地編寫

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM