需要帮助来处理此错误:变量' x'在初始化之前使用

时间:2017-06-03 20:50:44

标签: swift sprite-kit

我在Swift whit可选功能参数中遇到问题。我想在函数中为SKSpriteNote设置一个值,但是在调用函数之前这个值不存在,所以我显然得到一个错误; /

有人可以告诉我该怎么做,解决这个问题吗?

这就是我得到的错误: 变量" buy_ingredient_market_graphic'在初始化之前使用

这是我的功能(见

func show_market_graphic(x: CGFloat, y: CGFloat, level: String, ingredient: String?){

    var market_graphic: SKSpriteNode

    var bought_ingredient_market_graphic: SKSpriteNode

    if(level == "locked"){

        market_graphic = SKSpriteNode(imageNamed: "locked_ingredient")

    } else {

        market_graphic = SKSpriteNode(imageNamed: "bought_ingredient")

        bought_ingredient_market_graphic = SKSpriteNode(imageNamed: ingredient!)
    }

    market_graphic.zPosition = 10

    market_graphic.position = CGPoint(x: x, y: y)

    addChild(market_graphic)

    if(level != "locked"){
        // * ERROR ON LINE BELOW
        bought_ingredient_market_graphic.zPosition = 20
        // * ERROR ON LINE BELOW
        bought_ingredient_market_graphic.position = market_graphic.position
        // * ERROR ON LINE BELOW
        addChild(bought_ingredient_market_graphic)
    }
}

2 个答案:

答案 0 :(得分:0)

您的代码原则上应该工作,编译器无法检测level == "locked"level != "locked"之间的核心关系。

我认为编译器会发现级别值可能会在状态中发生变化的风险。因此,最好的方法是在第一个if子句中初始化bought_ingredient_market_graphic

答案 1 :(得分:0)

首先,我会考虑在传递参数" level"时使用枚举。进入功能。这将有助于修复功能中可能存在的逻辑问题。

您的问题可能存在的地方:如果您未传入非零成分字符串,则在访问或使用bought_ingredient_market_graphic时会遇到错误。您可以在字符串中输入用于初始化图像的拼写错误。确保您的字符串与您的图像名称匹配。这很可能发生了什么。

另外,为什么不尝试在else逻辑中初始化你的精灵呢?

func show_market_graphic(x: CGFloat, y: CGFloat, level: String, ingredient: String?) {

   var market_graphic: SKSpriteNode

   var bought_ingredient_market_graphic: SKSpriteNode

   if level == "locked" {

      market_graphic = SKSpriteNode(imageNamed: "locked_ingredient")

   } else {

      market_graphic = SKSpriteNode(imageNamed: "bought_ingredient")

      bought_ingredient_market_graphic = SKSpriteNode(imageNamed: ingredient!)
      bought_ingredient_market_graphic.zPosition = 20
      bought_ingredient_market_graphic.position = market_graphic.position
      addChild(bought_ingredient_market_graphic)

   }

   market_graphic.zPosition = 10
   market_graphic.position = CGPoint(x: x, y: y)
   addChild(market_graphic)
}