可选类型“UIImage?”的值未打开

Posted

技术标签:

【中文标题】可选类型“UIImage?”的值未打开【英文标题】:Value of optional type 'UIImage?' not unwrapped 【发布时间】:2016-05-19 14:17:17 【问题描述】:

我正在尝试创建一个简单的过滤器应用程序,在按下按钮时过滤显示的图像。

 @IBAction func applyFilter(sender: AnyObject) 

    // Create an image to filter
    let inputImage = CIImage(image: photoImageView.image)

    // Create a random color to pass to a filter
    let randomColor = [kCIInputAngleKey: (Double(arc4random_uniform(314)) / 100)]

    // Apply a filter to the image
    let filteredImage = inputImage.imageByApplyingFilter("CIHueAdjust", withInputParameters: randomColor)

    // Render the filtered image
    let renderedImage = context.createCGImage(filteredImage, fromRect: filteredImage.extent())

    // Reflect the change back in the interface
    photoImageView.image = UIImage(CGImage: renderedImage)


我不断收到错误:

可选类型“UIImage?”的值没有拆开。

我在这里做错了什么?我是 Swift 初学者。

【问题讨论】:

必须了解 Optionals,这是 Swift 中的一个关键概念:developer.apple.com/library/ios/documentation/Swift/Conceptual/… 【参考方案1】:

UIImageView 的图像属性中并不总是有 UIImage。

你应该在之前检查:

guard let img = photoImageView.image else  return 
let inputImage = CIImage(image: img)

【讨论】:

【参考方案2】:

正如 Eric 所说,您应该了解可选项。在这种情况下,如果我们查看UIImage init,我们会看到如果方法失败,它可以返回 nil。因此,您必须先确保 UIImage 已成功创建

if let myImage = UIImage(CGImage: renderedImage)
    photoImageView.image = myImage

【讨论】:

以上是关于可选类型“UIImage?”的值未打开的主要内容,如果未能解决你的问题,请参考以下文章

可选类型“字符串?”的值未解包错误

可选类型 'NSURL?' 的值未拆封;你的意思是用'!'或者 '?'?

FBSDKGraphRequest:结果 - 可选类型“任何?”的值未拆封;你的意思是用'!'或者 '?'?

可选类型“字符串”的值未展开;你的意思是用'!或者 '?' [复制]

可选类型字符串的值?未打开

XCode 6 Beta 6 Beta 7 中的错误 - 可选类型的值未解包