无法强制解包非可选类型的值' UIImage'

时间:2016-04-13 07:03:23

标签: ios iphone swift uiimage xcode7.2

在我的项目中包含以下代码行。但我总是得到错误。我正在使用Xcode 7.2和iOS 9。

let image: UIImage = UIImage(CGImage:imageRef, scale:originalImage.scale, orientation:originalImage.imageOrientation)!

1 个答案:

答案 0 :(得分:0)

删除!

该方法的结果不是可选的 - 您不需要打开它。

注意:您不需要变量中的: UIImage - Swift会为您推断出它的类型。

编辑:如果imageRef是可选的(来自@ chewie'评论)会怎样?

您有几个选择。

1使用if let

if let imageRef = imageRef {
   let image = UIImage(CGImage: imageRef, scale: originalImage.scale, orientation: originalImage.imageOrientation)

    // Do something with image here
}

2使用guard

guard let imageRef = imageRef else {
    print("Oops, no imageRef - aborting")
    return
}

// Do something with image here
let image = UIImage(CGImage: imageRef, scale: originalImage.scale, orientation: originalImage.imageOrientation)

3使用地图

let image = imageRef.map {
    UIImage(CGImage: $0, scale: originalImage.scale, orientation: originalImage.imageOrientation)
}

// Do something with image here, remembering that it's 
// optional this time :)

选择使用哪种是你的,但这是我的经验法则。

如果你需要做什么需要一张图片,请使用guard并提前中止,如果你没有。这通常使您的代码更易于阅读和理解。

如果您需要做的事情可以在没有图片的情况下完成,请使用if letmapif let如果你只是想做某事然后再继续下去就很有用。如果您需要传递map并稍后再使用它,UIImage?非常有用。