我有一个基类。在这个基类中,我在init方法中进行了一些回调。在这些回调中,我想引用派生类self
。但是,Swift抱怨lambdas在self
之前引用了super.init
。当然,我知道实际上,基类实际上没有调用super.init
内的回调,即使它确实如此,但这并不是非法的,因为它不会是之前 super.init
。
如何将回调传递给引用super.init
的{{1}}?
答案 0 :(得分:1)
在拨打self
之前,无论如何都无法引用super.init
。 self
只能在初始化完成时引用。您必须寻找创建对象的其他方法(工厂方法,构建器模式)。
答案 1 :(得分:0)
我设法通过稍微重构这个类来解决这个毫无意义的限制。而不是简单地直接传递构造函数所需的数据,而是有一个数据的getter,恰好由超类构造函数调用一次。存储这些数据的变量,而不是不可变和正确的,现在用nil初始化(即保持未初始化),然后通过getter初始化,然后是另一个getter-only计算属性。
所以现在任何试图阅读该课程的人都会被这个无关紧要的蜿蜒所困扰,但实际上它确实具有所需的语义。