简体   繁体   English

UIImage 必须符合PHPickerViewControllerDelegate回调中的_ObjectiveCBridgeable

[英]UIImage must conform to _ObjectiveCBridgeable in PHPickerViewControllerDelegate callback

I have reviewed the WWDC2020 video explaining how to adopt the new PHPickerViewController API. I have also seen several blogs showing exactly the following code.我查看了WWDC2020 视频,解释了如何采用新的 PHPickerViewController API。我还看到几个博客显示了以下代码。

func picker(_ picker: PHPickerViewController, didFinishPicking results: [PHPickerResult]) {
    if let result = results.first, result.itemProvider.canLoadObject(ofClass: UIImage.self) {
        result.itemProvider.loadObject(ofClass: UIImage.self) { (image, error) in
            DispatchQueue.main.async {
                self.parent.didCapture(image)
            }
        }
    } else {
        parent.didCapture(nil)
    }
}

However, this fails for me and the error is quite bizarre.但是,这对我来说失败了,而且错误很奇怪。

UIImage must confirm to _ObjectiveCBridgable UIImage 必须确认到_ObjectiveCBridgable

I will include a screenshot because it is quite unbelievable我将包括一个屏幕截图,因为它非常令人难以置信

在此处输入图像描述

Hardware: M1 chipset硬件:M1芯片组

IDE: Xcode 12.4 IDE:Xcode 12.4

Type cast image as UIImage before using, that should solve the issue.使用前将图像输入为 UIImage,应该可以解决问题。

if let typeCastedImage = image as? UIImage {
  self.parent.didCapture(typeCastedImage)
}

It depends on how you work with the values inside the function body.这取决于您如何处理 function 主体中的值。 There are two implementations for the loadObject() function. One of them can actually accept UIImage.self. loadObject() function 有两种实现。其中一种实际上可以接受 UIImage.self。 In my case, the following code works:就我而言,以下代码有效:

func picker(_ picker: PHPickerViewController, didFinishPicking results: [PHPickerResult]) {
    if let itemProvider = results.first?.itemProvider, itemProvider.canLoadObject(ofClass: UIImage.self) {
        itemProvider.loadObject(ofClass: UIImage.self) { image, error in
            if let image = image as? UIImage {
                DispatchQueue.main.async {
                    self.imageViewField.image = image
                }
            }
        }
    }
}

It is necessary to make a check for conformance to the type of UIImage.有必要检查是否符合 UIImage 的类型。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM