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