【问题标题】:SceneKit Swift 3 Inheritance does not workSceneKit Swift 3 继承不起作用
【发布时间】:2017-09-01 19:19:09
【问题描述】:

我写了一个类:

import UIKit
import SceneKit

class Scene: SCNScene {

var _sceneView: SCNView!
var cameraNode: SCNNode!

func setupView(view: SCNView) {

    _sceneView = view

   }
}

但是当我在 GameViewController 中调用该类的函数时:

import UIKit
import QuartzCore
import SceneKit
import SpriteKit

class GameViewController: UIViewController, SCNSceneRendererDelegate {

var scene: Scene?                       = nil

override func viewDidLoad() {

super.viewDidLoad()

    //Super
    super.viewDidLoad()

    scene = Scene()

    let sceneView = self.view as! SCNView

    ...

    sceneView.scene = scene?.setupView(view: sceneView)
  }
}

显示错误:

无法分配“()”类型的值?输入“SCNScene?”

当我尝试调用函数时,它划掉了函数:

请解释并帮助解决该问题。

提前致谢。

【问题讨论】:

  • 函数setupView(view:)返回Void。所以你试图做sceneView.scene = Void 这没有任何意义。

标签: inheritance compiler-errors 3d swift3 scenekit


【解决方案1】:

忽略其他潜在问题(除非绝对需要,否则不要强制解包 (!) 东西,下划线变量名是来自 Objective-c ivars 的约定,有时用于命名 swift 类的私有存储),你可能想要的是类似的东西:

//: Playground - noun: a place where people can play

import UIKit
import SceneKit
import QuartzCore
import SpriteKit

class Scene: SCNScene {

    var _sceneView: SCNView!
    var cameraNode: SCNNode!

    func setupView(view: SCNView) {

        _sceneView = view

    }
}

class GameViewController: UIViewController, SCNSceneRendererDelegate {

    var scene: Scene? = nil

    override func viewDidLoad() {
        super.viewDidLoad()

        let scene = Scene()

        let sceneView = self.view as! SCNView
        scene.setupView(view: sceneView)
        sceneView.scene = scene

        self.scene = scene
    }
}

【讨论】:

    猜你喜欢
    • 2018-05-24
    • 2015-03-04
    • 2012-06-04
    • 2013-04-24
    • 1970-01-01
    • 1970-01-01
    • 2017-02-17
    • 2017-05-11
    • 2011-03-09
    相关资源
    最近更新 更多