"UIImage? не конвертируется в проблему UIImage в swift 4 - PullRequest
3 голосов
/ 05 июля 2019

Я пытаюсь реализовать средство выбора изображений. В методе делегата я получаю следующую ошибку.

enter image description here

или

enter image description here

Вот код, который я написал

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)
}

Я попробовал это с помощью Swift 5, и он работает без ошибок. Но проблема со Swift 4.

Как решить эту проблему? Есть ли какое-то решение для этого?

Ответы [ 3 ]

3 голосов
/ 05 июля 2019

Подпись UIImagePickerControllerDelegate различна для разных версий Swift.Вы используете метод Swift 4.2 и более поздних версий, который сильно отличается от 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")
    }
}

Итак, проверьте правильную версию swift и следуйте соответствующим методам!

1 голос
/ 05 июля 2019

Я попробовал это с помощью Swift 5, и он работает без ошибок. Но проблема со Swift 4.

Прежде всего, если вы используете Xcode 10.x, я настоятельно рекомендую вам выполнить обновление Swift 5. Забудьте Swift 4 и оставайтесь в курсе.

Во-вторых, это правильная UIImagePickerControllerDelegate реализация в Swift 5:

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
    if let image = info[UIImagePickerController.InfoKey.originalImage] as? UIImage {
        // do stuff with your original image...

    } else if let image = info[UIImagePickerController.InfoKey.editedImage] as? UIImage {
        // do something with your edited image...
    }
    dismiss(animated: true, completion: nil)
}


В любом случае, если вы хотите придерживаться Swift 4, используйте функцию делегата ImagePicker:

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
        if let chosenImage = info[UIImagePickerControllerOriginalImage] as! UIImage {
            // do stuff with your image
        } else if let chosenImage = info[UIImagePickerControllerOriginalImage] as! UIImage {
            // do stuff with your image
        }
        dismiss(animated:true, completion: nil)
}
0 голосов
/ 05 июля 2019

Основная проблема в том, что в Swift 4 нет UIImagePickerController.InfoKey. Компилятор не может определить этот тип, что вызывает ошибку Если вы используете правильную подпись для swift 4 со словарем [String: Any], ошибка исчезнет

...