0

在我用 Swift 编写的 iOS 应用程序中,我有一个从 NSError 扩展而来的 Error 类。

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”

是否可以在调用之前获取Class对象?我知道这听起来很奇怪,但我认为我的例子说明了我为什么需要它。initsuper.init

4

1 回答 1

0

您必须在调用之前初始化所有实例属性super.init()

但是由于您正在传递类型属性的值,因此您可以简单地编写

super.init(
        domain: MyError.ErrorDomain,
        code: MyError.ErrorCode,
        userInfo: userInfo
    )
于 2014-10-20T10:11:10.173 回答