web-dev-qa-db-de.com

Swift 4.2 Wert vom Typ '(UIImagePickerController.InfoKey) .Type' kann nicht in den erwarteten Argumenttyp 'UIImagePickerController.InfoKey' konvertiert werden

Mein unten stehender Code funktionierte gut mit Swift 4, aber nach dem Upgrade auf Swift 4.2 bekomme ich diesen Fehler. Ich hatte meine 3 Stunden damit verbracht, nach dem Problem zu suchen, das jedoch fehlgeschlagen ist. Bitte, wenn mir jemand helfen kann, wie ich das beheben kann.

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

Du kannst schreiben wie ...

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

macht keinen Sinn. Sie geben den gesamten Aufzählungstyp InfoKey anstelle eines bestimmten Werts an, z. B.

info[convertFromUIImagePickerControllerInfoKey(UIImagePickerController.InfoKey.originalImage)]

Was kann wohl auch so geschrieben werden:

info[.originalImage] as! UIImage
3
Sulthan

Sie können wie folgt auf die Eigenschaften zugreifen.

var editedImage = (info[UIImagePickerControllerEditedImage] as? UIImage)!
var originalImage = (info[UIImagePickerControllerOriginalImage] as? UIImage)!
2
isuru
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