UIImage должен соответствовать _ObjectiveCBridgeable в обратном вызове PHPickerViewControllerDelegate

Я просмотрел видео WWDC2020, в котором объясняется, как внедрить новый API PHPickerViewController. Я также видел несколько блогов, в которых был показан именно такой код.

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

Однако это не для меня, и ошибка довольно странная.

UIImage должен подтвердить _ObjectiveCBridgable

Я приложу скриншот, потому что это невероятно

Оборудование: чипсет M1

IDE: Xcode 12.4

3 ответа

Перед использованием введите приведенное изображение как UIImage, это должно решить проблему.

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

Это зависит от того, как вы работаете со значениями внутри тела функции. Есть две реализации функции loadObject(). Один из них действительно может принимать UIImage.self. В моем случае работает следующий код:

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

Необходимо сделать проверку на соответствие типу UIImage.

Проблема в том, что есть другая функция с тем же именем, которая требует, чтобы класс соответствовал _ObjectiveCBridgeable.

Чтобы заставить компилятор выбрать правильную функцию, вы можете определить тип NSItemProviderReading.Type:

          let type: NSItemProviderReading.Type = UIImage.self

    result.itemProvider.loadObject(ofClass: type) { image, error in
        ...
    }
Другие вопросы по тегам