我在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)
}
}
答案 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)
}