在我用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初始化之前在base对象中使用属性'classForCoder'
在调用Class
之前,是否可以在init
中获取super.init
个对象?我知道这听起来很奇怪,但我认为我的例子说明了我为什么需要它。
答案 0 :(得分:0)
您必须在调用super.init()
之前初始化所有实例属性。
但是,由于您传递了类型属性的值,因此您只需编写
即可super.init(
domain: MyError.ErrorDomain,
code: MyError.ErrorCode,
userInfo: userInfo
)