[英]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.