繁体   English   中英

在super.init之前的init中调用classForCoder

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM