首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用didFinishPickingMediaWithInfo方法时,无法使用类型为“”(Int,@escaping () -> ())“”的参数列表调用“”UIImage“”

使用didFinishPickingMediaWithInfo方法时,无法使用类型为“”(Int,@escaping () -> ())“”的参数列表调用“”UIImage“”
EN

Stack Overflow用户
提问于 2020-01-28 21:17:28
回答 1查看 61关注 0票数 0

我之前使用过下面的UIImage Extension

代码语言:javascript
复制
extension UIImage
{
    func scaleImage(_ maxDimension: CGFloat) -> UIImage?
    {
        var scaledSize = CGSize(width: maxDimension, height: maxDimension)

        if size.width > size.height
        {
            let scaleFactor = size.height / size.width
            scaledSize.height = scaledSize.width * scaleFactor
        }
        else
        {
            let scaleFactor = size.width / size.height
            scaledSize.width = scaledSize.height * scaleFactor
        }

        UIGraphicsBeginImageContext(scaledSize)
        draw(in: CGRect(origin: .zero, size: scaledSize))

        let scaledImage = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()

        return scaledImage
    }
}

我在我的ViewController中使用了这个扩展,如下所示:

代码语言:javascript
复制
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any])
{
    if let selectedImage = info[UIImagePickerControllerOriginalImage] as? UIImage
    {
        let scaledPhoto = selectedImage.scaleImage(640)
        {
            activityIndicatorOutlet.startAnimating()
            dismiss(animated: true, completion:
                {
                    //recognize the image
            })
        }

    }
}

但是Xcode给出了一个错误。因为didFinishPickingMediaWithInfo方法发生了如下变化:

代码语言:javascript
复制
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {

}

因此,我用最新版本更改了didFinishPickingMediaWithInfo方法:

代码语言:javascript
复制
    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {

}

然后Xcode希望我改变这一点:

代码语言:javascript
复制
'UIImagePickerControllerOriginalImage' has been renamed to 'UIImagePickerController.InfoKey.originalImage'
Replace 'UIImagePickerControllerOriginalImage' with 'UIImagePickerController.InfoKey.originalImage'

我已经按照Xcode的要求修改了上面的代码:

代码语言:javascript
复制
if let selectedImage = info[UIImagePickerController.InfoKey.originalImage] as? UIImage
        {
            let scaledPhoto = selectedImage.scaleImage(640)
            {
                activityIndicatorOutlet.startAnimating()
                dismiss(animated: true, completion:
                    {
                        //recognize the image
                })
            }

        }

最后,Xcode在以下代码行中显示了一个错误:

代码语言:javascript
复制
let scaledPhoto = selectedImage.scaleImage(640)

下面是错误:

代码语言:javascript
复制
Cannot invoke 'scaleImage' with an argument list of type '(Int, @escaping () -> ())'

我该如何解决这个问题呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-28 21:35:02

scaleImage函数获取图像时,遗漏了let关键字

像下面这样修改你的代码,让它工作起来

代码语言:javascript
复制
if let selectedImage = info[UIImagePickerController.InfoKey.originalImage] as? UIImage {

     if let scaledPhoto = selectedImage.scaleImage(100) {

         print(scaledPhoto)
         activityIndicatorOutlet.startAnimating()
         dismiss(animated: true, completion: {
                //recognize the image
         })
     }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59949664

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档