0
在我用Swift編寫的iOS應用程序中,我有一個Error類,它從NSError擴展而來。在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 }
[...]
}
這樣我可以使用的init從MyError
類,並具有用於子類的錯誤的對象的自定義域和碼。
它在Xcode 6.0.1上運行良好。問題是,它不會在Xcode 6.1中編譯。我得到這個編譯器錯誤MyError
班線:
[...]
domain: self.classForCoder.ErrorDomain,
code: self.classForCoder.ErrorCode,
[...]
在基本對象使用的特性「classForCoder」之前super.init初始化
是否有可能得到Class
對象init
在致電super.init
之前?我知道這聽起來很奇怪,但我認爲我的例子顯示了我爲什麼需要它。
這顯然會工作。不幸的是,當init調用MyError2時,新對象將具有來自MyError而不是MyError2類的域和代碼。我對嗎? – Darrarski 2014-10-20 10:12:57
是的,你完全正確。對不起,沒想過。 – marcusficner 2014-10-20 10:22:25