在其范围之外使用变量

时间:2015-06-09 13:12:27

标签: swift scope

我希望访问其范围之外的变量。 (发布了相关代码的片段)。在@IBAction中,无法识别sphereNode.runAction(moveUp)。

我不能简单地声明sphereNode全局,因为它依赖于sphereGeometry声明。

override func viewDidLoad() {
    super.viewDidLoad()

    //Added our first shape = sphere
    let sphereGeometry = SCNSphere(radius: 1.0)
    let sphereNode = SCNNode(geometry: sphereGeometry)
    sphereNode.position = SCNVector3Make(0, 0, 0)
    sphereGeometry.firstMaterial!.diffuse.contents = UIColor.redColor()
    sphereGeometry.firstMaterial!.specular.contents = UIColor.whiteColor()
    scene.rootNode.addChildNode(sphereNode)
}

@IBAction func animateButton(sender: AnyObject) {
    let moveUp = SCNAction.moveByX(0.0, y: 1.0, z: 0.0, duration: 1.0)
    sphereNode.runAction(moveUp)
}

}`

初学者程序员,所以请简单的解释表示感谢 - 提前感谢。

1 个答案:

答案 0 :(得分:1)

这里需要的是一个实例变量。

变量不能在其范围之外使用(最终你会发现这是一件非常棒的事情)。但我们可以扩展变量的范围:

class YourViewController: UIViewController {
    var sphereNode: SNNode?

    override func viewDidLoad() {
        super.viewDidLoad()

        //Added our first shape = sphere
        let sphereGeometry = SCNSphere(radius: 1.0)
        self.sphereNode = SCNNode(geometry: sphereGeometry)
        self.sphereNode?.position = SCNVector3Make(0, 0, 0)
        sphereGeometry.firstMaterial!.diffuse.contents = UIColor.redColor()
        sphereGeometry.firstMaterial!.specular.contents = UIColor.whiteColor()
        scene.rootNode.addChildNode(sphereNode)
    }

    @IBAction func animateButton(sender: AnyObject) {
        let moveUp = SCNAction.moveByX(0.0, y: 1.0, z: 0.0, duration: 1.0)
        self.sphereNode?.runAction(moveUp)
    }
}