在子类

时间:2018-01-28 23:26:02

标签: swift

我正试图弄清楚我的子类的正确操作顺序。我有一个子类,其dataCollector属性符合DataCollectorProtocol。当我初始化DataCollector时,我需要将MySubclass设置为委托,如构造函数中所示。这工作正常,但我必须使用DataCollectorProtocol!将dataCollector声明为!。如果我尝试没有它,那么我不能首先调用super.init因为dataCollector属性尚未初始化。

如果我在设置dataCollector之后切换两个并调用super.init,我也不能,因为在(delegate: self)中,self未初始化。我是通过使用!正确的方法来规划它的方式还是有更好的更为惯用的Swift方式?

class MySubclass: BaseClass {

    var dataCollector: DataCollectorProtocol!

    required public init(delegate: SomeOtherDelegate) {
        super.init(delegate: delegate)

        dataCollector = DataCollector(delegate: self)
    }
}

1 个答案:

答案 0 :(得分:1)

我重新阅读了您的问题并弄清楚您真正尝试做什么(我的原始答案在编辑中)。

试试这个:

class MySubclass: BaseClass, DataCollectorProtocol {

    var dataCollector : DataCollector?

    required public init(delegate: SomeOtherDelegate) {
        super.init(delegate: delegate)

        dataCollector = DataCollector(delegate: self)
    }
}

当你需要调用dataCollector上的任何方法时,不要忘记取消引用:

 self.dataCollector?.someFineMethodToBeCalled()
相关问题