Swift:"必须调用超类的指定初始化程序"错误,即使代码正在这样做

Cra*_*lot 8 ios scenekit swift scnnode

目标是子类化SCNNode.根据类docs,init(geometry geometry: SCNGeometry?)是一个指定的初始化器(没有convenience列出关键字),所以这个代码是不是调用了它的超类的指定初始化器?

为什么Xcode显示以下错误?

必须调用超类SCNNode的指定初始值设定项

class PreviewNode: SCNNode {
    // Constants
    let PreviewNodeColor = gRedColor
    let Size = CGFloat(1.0)
    let ChamferRadius = CGFloat(0.0)

    override init() {
        let previewBox = SCNBox(width: Size, height: Size, length: Size, chamferRadius: ChamferRadius)
        previewBox.firstMaterial!.diffuse.contents = PreviewNodeColor
        previewBox.firstMaterial!.transparency = 0.2
        previewBox.firstMaterial!.specular.contents = UIColor.whiteColor()
        super.init(geometry: previewBox)
    }
}
Run Code Online (Sandbox Code Playgroud)

Leo*_*bus 7

问题是你在调用self.init()之前也试图访问你的PreviewNode属性

试试这样:

Xcode 8 GM•Swift 3

class PreviewNode: SCNNode {
    let previewNodeColor: UIColor = .red
    let size: CGFloat = 1
    let chamferRadius: CGFloat = 0
    convenience override init() {
        self.init()
        let previewBox = SCNBox(width: size, height: size, length: size, chamferRadius: chamferRadius)
        previewBox.firstMaterial?.diffuse.contents = previewNodeColor
        previewBox.firstMaterial?.transparency = 0.2
        previewBox.firstMaterial?.specular.contents = UIColor.white
        self.geometry = previewBox
    }
}
Run Code Online (Sandbox Code Playgroud)