【发布时间】:2014-11-10 22:55:58
【问题描述】:
尝试了以下推导的许多变体,但没有任何工作。
import Foundation
import SceneKit
class test:SCNScene{
override init(){
super.init()
}
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
convenience init? (i:UIViewController){
self.init(named:"") //Compile Error:use of self delegating initializer before self.init is called
}
}
根据Swift documentation,初始化规则2,在实现了2个指定的Initializer之后,不应该init?(named:String)便利的failable Initializer可用吗?我怎么了?
【问题讨论】:
-
规则 2 规定“便利初始化程序必须调用同一类的另一个初始化程序。” - 你的班级没有定义
init?(named:String) -
我所指的规则是关于“自动初始化器继承”主题:“如果您的子类提供其所有超类指定初始化器的实现——或者通过按照规则 1 继承它们,或者通过提供自定义实现作为其定义的一部分——然后它会自动继承所有超类便利初始化器。”
-
是的,超类初始化器可供您使用,但这并不意味着您可以忽略我引用的规则 - 您必须从您的类中调用不方便的初始化器
-
好的,那么如何在测试课上实现
init?(named:String)呢?init?(named:String)是一个方便的初始化程序,没有指定的初始化程序接受文件,即使在self.init()之后没有加载的方法@ -
您需要在致电
self.init(named:"")之前致电self.init(),如错误消息所示