在子类上创建方便的初始化程序,调用可用的初始化程序

时间:2014-11-10 22:55:58

标签: ios swift

尝试了以下衍生品的许多变体但没有效果。

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,不应该初始化?(命名:String)在实现2指定的初始化程序后,方便的可用初始化程序是否可用?我错了什么?

1 个答案:

答案 0 :(得分:8)

初始化委派规则#2声明

  

便捷初始化程序必须从中调用另一个初始化程序   类。

你的班级没有定义init?(命名:String),所以它会调用超类初始化器(你可以根据你所指的其他规则#2访问它),但这会赢得'满足从您的班级调用非便利初始化者的要求。

您可以在调用超类初始化程序之前调用self.init

convenience init? (i:UIViewController){
        self.init()
        self.init(named:"") 
}