Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 运行到:在展开可选值时意外发现nil,当我尝试使其成为可选值时,我得到另一个错误_Ios_Swift_Sprite Kit - Fatal编程技术网

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 type
Bool?
not
unwrapped时出现此错误你想用“!”吗还是“?”

一小时前还可以

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崩溃是由于意外地展开了隐式展开