无法转换类型' String'的值预期参数类型' SKNode'

时间:2016-02-21 10:05:46

标签: swift sprite-kit xcode7

最后一行有问题。我该如何解决这个问题?问题说''无法转换类型'字符串'的值预期参数类型' SKNode'。 ''这是我的代码:

import SpriteKit

let BallCategoryName = "ball"

class GameScene: SKScene {

    let ball = childNodeWithName(BallCategoryName) as! SKSpriteNode

1 个答案:

答案 0 :(得分:1)

问题

您在对象初始化之前使用self

事实上写这个

let ball = childNodeWithName(BallCategoryName) as! SKSpriteNode

等于写这个

let ball = self.childNodeWithName(BallCategoryName) as! SKSpriteNode

但是在属性初始化期间,GameScene的当前实例尚不存在!所以还没有self

这是一件好事,因为如果已编译允许此代码,它会在运行时崩溃,因为您ball中没有Scene节点(因为还没有场景) )。

解决方案

我建议你

  1. 存储的属性转换为计算属性
  2. 使用小写字符作为此属性的第一个名称,如ballCategoryName
  3. 更喜欢条件播送(作为?而不是!)
  4. 将全局常量ballCategoryName转换为存储属性
  5. 代码

    class GameScene: SKScene {
        let ballCategoryName: String = "ball"
        var ball: SKSpriteNode? {
            return childNodeWithName(ballCategoryName) as? SKSpriteNode
        }
    }