it-roy-ru.com

Swift 4.2 Невозможно преобразовать значение типа '(UIImagePickerController.InfoKey) .Type' в ожидаемый тип аргумента 'UIImagePickerController.InfoKey'

Приведенный ниже код прекрасно работал со Swift 4, но после обновления до Swift 4.2 я получаю эту ошибку, я потратил впустую 3 часа на поиск проблемы, но не смог. Пожалуйста, если кто-нибудь может мне помочь, как это исправить.

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {

    if postType == 2 {
        let image = info[convertFromUIImagePickerControllerInfoKey(UIImagePickerController.InfoKey)] as! UIImage
        mediaType.image = image
    } else {
        videoURL = info[convertFromUIImagePickerControllerInfoKey(UIImagePickerController.InfoKey.mediaURL)] as? URL
        do {
            let asset = AVURLAsset(url: videoURL!, options: nil)
            let imgGenerator = AVAssetImageGenerator(asset: asset)
            imgGenerator.appliesPreferredTrackTransform = true
            let cgImage = try imgGenerator.copyCGImage(at: CMTime.init(value: 0, timescale: 1), actualTime: nil)
            let thumbnail = UIImage(cgImage: cgImage)
            self.mediaType.image = thumbnail
        } catch {
            print("*** Error generating thumbnail: \(error)")
        }
    }
    picker.dismiss(animated: true, completion: nil)
}
9
Muhammad Khan

Вы можете написать как ...

if let image = info[.originalImage] as? UIImage {

    print("image found")
    //do something with an image

} else {
     print("Not able to get an image")
}
18
Mahendra GP
info[convertFromUIImagePickerControllerInfoKey(UIImagePickerController.InfoKey)]

не имеет никакого смысла. Вы указываете весь тип перечисления InfoKey вместо конкретного значения, например:

info[convertFromUIImagePickerControllerInfoKey(UIImagePickerController.InfoKey.originalImage)]

Который может быть также написан так:

info[.originalImage] as! UIImage
3
Sulthan
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any])
{
    // Local variable inserted by Swift 4.2 migrator.
    let info = convertFromUIImagePickerControllerInfoKeyDictionary(info)

    if picker.sourceType == .photoLibrary || picker.sourceType == .camera
    {
        let img: UIImage = info[convertFromUIImagePickerControllerInfoKey(UIImagePickerController.InfoKey.editedImage)] as! UIImage
        EditedImage=img
        WAProfile_UserImageView.image=EditedImage
        picker.dismiss(animated: true, completion: nil)
    }
}

// Helper function inserted by Swift 4.2 migrator.
fileprivate func convertFromUIImagePickerControllerInfoKeyDictionary(_ input: [UIImagePickerController.InfoKey: Any]) -> [String: Any] {
return Dictionary(uniqueKeysWithValues: input.map {key, value in (key.rawValue, value)})}

// Helper function inserted by Swift 4.2 migrator.
fileprivate func convertFromUIImagePickerControllerInfoKey(_ input: UIImagePickerController.InfoKey) -> String {
return input.rawValue}
0
Jignesh Radadiya