Ios 运行到:在展开可选值时意外发现nil,当我尝试使其成为可选值时,我得到另一个错误
我在尝试使Ios 运行到:在展开可选值时意外发现nil,当我尝试使其成为可选值时,我得到另一个错误,ios,swift,sprite-kit,Ios,Swift,Sprite Kit,我在尝试使farmTileoptional:optional typeBool?notunwrapped时出现此错误你想用“!”吗还是“?” 一小时前还可以 var farmTile:SKSpriteNode! func createFarmTile(){ farmTile = SKSpriteNode(imageNamed: "farmtile.png") farmTile?.size = CGSize(width: 185, height: 195) farmTi
farmTile
optional:optional typeBool?
notunwrapped时出现此错误代码>你想用“!”吗还是“?”
一小时前还可以
var farmTile:SKSpriteNode!
func createFarmTile(){
farmTile = SKSpriteNode(imageNamed: "farmtile.png")
farmTile?.size = CGSize(width: 185, height: 195)
farmTile?.position = CGPoint(x: -95, y: 150)
self.addChild(farmTile!)
farmTile?.name = "farmTile"
farmTile.zPosition = 1
if farmTile?.contains(touchLocation){
print("test")
}
}
farmTile?.contains(touchLocation)
返回可选布尔值。你应该正确处理这个可选的。像这样做
var farmTile: SKSpriteNode? // optional
func createFarmTile(){
guard let farmTile = SKSpriteNode(imageNamed: "farmtile.png")
else { /* do what you need to do if it is missing */ ; return }
farmTile.size = CGSize(width: 185, height: 195)
farmTile.position = CGPoint(x: -95, y: 150)
self.addChild(farmTile)
farmTile.name = "farmTile"
farmTile.zPosition = 1
self.farmTile = farmTile
if farmTile.contains(touchLocation){
print("test")
}
}
farmTile?.contains(touchLocation)
返回可选布尔值。你应该正确处理这个可选的。像这样做
var farmTile: SKSpriteNode? // optional
func createFarmTile(){
guard let farmTile = SKSpriteNode(imageNamed: "farmtile.png")
else { /* do what you need to do if it is missing */ ; return }
farmTile.size = CGSize(width: 185, height: 195)
farmTile.position = CGPoint(x: -95, y: 150)
self.addChild(farmTile)
farmTile.name = "farmTile"
farmTile.zPosition = 1
self.farmTile = farmTile
if farmTile.contains(touchLocation){
print("test")
}
}
出现此错误的原因是:在展开可选值时意外发现nil
,这是因为对于不应为nil
的内容,您有一个nil
。在您的情况下,您的farmtile
是nil
,但您使用的是SKSpriteNode
在外行术语中是指在使用此变量时,最好不要为nil
您设置farmtile的唯一一点是在这一行farmtile=SKSpriteNode(ImageName:“farmtile.png”)
,这意味着您的图像文件有问题,因为SKSpriteNode
将返回nil
。我建议您检查以确保在资产中正确设置图像文件,正确命名图像文件,并将其绑定到二进制文件中。如果我知道你是如何设置资产的,我可以在这里提供进一步的帮助
解决了这个问题后,你面前还有另一个问题。(我假设这将是一个不同的函数)
这是您得到第二个错误的地方:optional:optional类型Bool的值?没有打开包装;你想用“!”吗或“?”?
您在编译时而不是运行时收到此错误,因为您添加了?你的farmTile
认为它能解决你的问题,而实际上它不能
现在,在这一点上,你可以正确地处理你的期权
您可以使用guard语句来验证是否正在创建精灵,并将更有意义的消息传递给您自己,以便您知道将来的问题所在
var farmTile:SKSpriteNode!
func createFarmTile(){
guard let farmTile = SKSpriteNode(imageNamed: "farmtile.png") else { //insert your error handling here}
farmTile.size = CGSize(width: 185, height: 195)
farmTile.position = CGPoint(x: -95, y: 150)
farmTile.name = "farmTile"
farmTile.zPosition = 1
self.farmTile = farmTile
self.addChild(farmTile)
}
此时,我们将其设计为farmTile
必须存在(基本上是通过确保调用createFarmTile
函数来实现的),因此没有理由添加额外的展开,因此去掉问号
//Inside the touch begins function
if farmTile.contains(touchLocation){
print("test")
}
出现此错误的原因是:在展开可选值时意外发现nil
,这是因为对于不应为nil
的内容,您有一个nil
。在您的情况下,您的farmtile
是nil
,但您使用的是SKSpriteNode
在外行术语中是指在使用此变量时,最好不要为nil
您设置farmtile的唯一一点是在这一行farmtile=SKSpriteNode(ImageName:“farmtile.png”)
,这意味着您的图像文件有问题,因为SKSpriteNode
将返回nil
。我建议您检查以确保在资产中正确设置图像文件,正确命名图像文件,并将其绑定到二进制文件中。如果我知道你是如何设置资产的,我可以在这里提供进一步的帮助
解决了这个问题后,你面前还有另一个问题。(我假设这将是一个不同的函数)
这是您得到第二个错误的地方:optional:optional类型Bool的值?没有打开包装;你想用“!”吗或“?”?
您在编译时而不是运行时收到此错误,因为您添加了?你的farmTile
认为它能解决你的问题,而实际上它不能
现在,在这一点上,你可以正确地处理你的期权
您可以使用guard语句来验证是否正在创建精灵,并将更有意义的消息传递给您自己,以便您知道将来的问题所在
var farmTile:SKSpriteNode!
func createFarmTile(){
guard let farmTile = SKSpriteNode(imageNamed: "farmtile.png") else { //insert your error handling here}
farmTile.size = CGSize(width: 185, height: 195)
farmTile.position = CGPoint(x: -95, y: 150)
farmTile.name = "farmTile"
farmTile.zPosition = 1
self.farmTile = farmTile
self.addChild(farmTile)
}
此时,我们将其设计为farmTile
必须存在(基本上是通过确保调用createFarmTile
函数来实现的),因此没有理由添加额外的展开,因此去掉问号
//Inside the touch begins function
if farmTile.contains(touchLocation){
print("test")
}
可能重复的您没有名为farmtile.png的图像检查拼写(如果在资产中已存在)可能重复的您没有名为farmtile.png的图像检查拼写(如果在资产中已存在)崩溃是因为farmtile?.contains(touchLocation)
我认为应该是self.addChild(farmtile!)@Knight0fDragon,因为他在nil
时强制打开farmTile
。“我的回答没有这个意思。”奈特弗德拉贡你在说什么?你读过防护装置的其他部分了吗。这里有一个很好的注释可以用于错误处理。@Knight0fDragon提问者已经通过将变量设置为可选变量而不是隐式展开解决了这个问题,它在标题中说得很对。@KnightofDragon崩溃是由于意外地展开了一个为零的隐式可选变量。他。有已经。有花纹的。那个出来我的答案中有错误处理,但我没有规定任何具体的处理方法。这取决于他。崩溃是因为farmTile吗?.contains(touchLocation)
我认为应该是self.addChild(farmTile!)
@Knight0fDragon,因为他在为零时强制打开farmTile
。“我的回答没有这个意思。”奈特弗德拉贡你在说什么?你读过防护装置的其他部分了吗。这里有一个很好的注释,可以将错误处理放在其中。@Knight0fDragon提问者已经通过将变量设置为可选变量而不是隐式展开来解决了这个问题,它在标题中说得很对。@KnightofDragon崩溃是由于意外地展开了隐式展开