2015-05-13 43 views
0

为什么这个变量为“无”即使我检查是否self.photoImageView.image != nil,在倒数第二行尝试applyBlurEffect时仍然出现fatal error: unexpectedly found nil while unwrapping an Optional value错误。即使我有一个“if”语句来检查它不是

你知道如何调和吗?

if (output?.getAccel() == true){ 
     if (output?.getImage() != nil){ 
      if (self.photoImageView.image != nil){ 
       println(photoImageView.image) 
       var blurredImage = self.applyBlurEffect(self.photoImageView.image!) 
       self.photoImageView.image = blurredImage 
      } 

对于上下文,我有一个photoImageView,并且当一个“加速度计按钮”被插入该photoImageView,这个函数使用图像,模糊它,并且更新图像作为模糊的图像。

此外,当我打印photoImageView.image,它返回 Optional(<UIImage: 0x174087d50> size {1340, 1020} orientation 0 scale 1.000000)。其中可能存在这个问题,但我需要一点帮助来解决它。

+1

我不明白为什么这不起作用。我认为这个问题与你在applyBlurEffect中做的事情有关,并不是因为展开图像给你零。 – rdelmar

回答

2

在Swift中,您必须使用可选绑定以确保可选项不为零。在这种情况下,你应该做这样的事情:

if let image = self.photoImageView.image { 
    //image is set properly, you can go ahead 
} else { 
    //your image is nil 
} 

这是斯威夫特一个非常重要的概念,所以你可以阅读更多here

UPDATE:作为@rdelmar指出,可选结合不是强制性这里,检查nil也应该够了。我个人更喜欢使用可选绑定。其好处之一是multiple optional binding而不是检查所有可选零件:

if let constantName = someOptional, anotherConstantName = someOtherOptional { 
    statements 
} 
+0

感谢这个,修复它。 –

+4

这是不正确的。你不*有*使用可选绑定,但它是一个很好的使用模式。在if语句中检查可选的等于nil也应该起作用。 – rdelmar

相关问题