Swift 4.2无法将类型'(UIImagePickerController.InfoKey).Type'的值转换为预期的参数类型'UIImagePickerController.InfoKey'

Muh*_*han 14 uiimagepickercontroller ios swift ios12

我的下面的代码与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)
}
Run Code Online (Sandbox Code Playgroud)

Mah*_*dra 22

你可以这样写......

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

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

} else {
     print("Not able to get an image")
}
Run Code Online (Sandbox Code Playgroud)

  • 这真的不起作用 (6认同)

Sul*_*han 5

info[convertFromUIImagePickerControllerInfoKey(UIImagePickerController.InfoKey)]
Run Code Online (Sandbox Code Playgroud)

没有任何意义。您正在指定整个枚举类型,InfoKey而不是指定特定值,例如:

info[convertFromUIImagePickerControllerInfoKey(UIImagePickerController.InfoKey.originalImage)]
Run Code Online (Sandbox Code Playgroud)

可能也可以这样写:

info[.originalImage] as! UIImage
Run Code Online (Sandbox Code Playgroud)

  • @Oleksandr May的观点是,您必须阅读整个答案并理解它。解释是答案的重要部分,它将使您学到一些东西。盲目复制粘贴代码很危险。 (3认同)