我试图减少代码中的强制展开,但有时我也不想编写 if let
检查(如果它们不是必需的)。
我注意到我在代码的一个特定部分进行了很多强制解包,用户用相机或手机库拍照,然后我裁剪并压缩它。这是所有强制解包的过程:
我强制从
imagePickerController(picker: didFinishPickingMediaWithInfo:)
函数解开图像:let pickedImage = info[UIImagePickerControllerOriginalImage] as! UIImage`
我对此感到非常安全,因为我有
imagePicker.mediaTypes = [kUTTypeImage as String]
。我使用
CGImageCreateWithImageInRect
来裁剪图像,它的第一个参数是一个CGImage
,我强制将其展开。这是我最大的假设,虽然我从未发生过车祸,但我仍然知道它不安全。let cgImage = CGImageCreateWithImageInRect(pickedImage.CGImage!, cropRect) let croppedImage = UIImage(CGImage: cgImage)
我使用返回
NSData
的UIImageJPEGRepresentation
,但如果图像没有CGImageRef
,则可能返回nil
。我也根据我之前的假设强行打开它。let jpegData = UIImageJPEGRepresentation(croppedImage, 0.85)
我再次通过强制展开来创建结果图像,因为我假设
jpegData
不是nil
。let resultImage = UIImage(data: jpegData)!
TLDR:UIImagePickerController
是否有可能返回没有 CGImage
的图像?如果是,我将在步骤 1 和 2 之间添加检查以查看是否存在 CGImage 值。我仍然可以安全地强制解开其他步骤吗?
最佳答案
是的,UIImage
的 CGImage 属性可以为 NULL
。
If the UIImage object was initialized using a CIImage object, the value of the property is NULL.
来源:https://developer.apple.com/reference/uikit/uiimage/1624147-cgimage
关于ios - UIImagePickerController 的图像是否可能没有 CGImage 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42244753/