Search code examples
iosswiftimageuiimagepickercontroller

'UIImage?' is not convertible to 'UIImage' issue in swift 4


I am trying to implement an image picker. In the delegate method I am getting the following error.

enter image description here

or

enter image description here

Here is the code, I wrote

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
    var image = info[.editedImage] as? UIImage
    if image == nil {
        image = info[.originalImage] as? UIImage
    }

    simpleImagePicker!.dismiss(animated: true)
}

I tried this using Swift 5 and it is working without error. But the issue is with Swift 4.

How to resolve this? Is there any solution for it?


Solution

  • The UIImagePickerControllerDelegate signature is different for different Swift versions. You are using the method of Swift 4.2 and later which is far different from Swift 4.0.

    Swift 4.0:

    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
        if let editedImage = info[UIImagePickerControllerEditedImage] as? UIImage {
    
        } else if let originalimage = info[UIImagePickerControllerOriginalImage] as? UIImage {
    
        }
    }
    

    Swift 4.2 & Swift 5:

    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
        if let image = info[UIImagePickerController.InfoKey.editedImage] as? UIImage {
    
        } else if let image = info[UIImagePickerController.InfoKey.originalImage] as? UIImage {
    
        } else {
            print("Something went wrong")
        }
    }
    

    So, check the proper swift version and follow the proper methods!