使用 Swift 代码发布识别应用程序

Issue with Swift code to make recognition app

**大家好...我正在尝试识别应用程序,只是我有一个图像视图、文本视图和按钮,代码在下面..我的第一个问题是我的图像视图在选择一个后没有改变图片! .. 我的第二个问题,它告诉我 "Arguments label image1 do not match any available overloads " 有什么帮助吗?

import UIKit
import CoreImage

class  ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate{

    @IBOutlet var myimage: UIImageView!
    @IBOutlet var info: UITextView!

    @IBAction func Import(_ sender: Any) {
        // create image picker
        let imagepicker = UIImagePickerController()
        imagepicker.delegate=self
        imagepicker.sourceType=UIImagePickerControllerSourceType.photoLibrary
        self.present(imagepicker ,animated: true, completion: nil)   
    }

      func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {
        if let Image1 = info[UIImagePickerControllerOriginalImage] as? UIImage {
            myimage.image = Image1   
        }
        self.dismiss(animated: true, completion: nil)
    }

    func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
        self.dismiss(animated: true, completion: nil)
    }

    // detect function
    func detect(){
        let image2 = CIImage (Image1:myimage.image!)! 

       // issue is here it says 
       "Arguments label image1 do not match any available overloads "
    }
}

您的第一个问题是您在委托调用中缺少 _,就在 picker: 之前,您需要写 Any 而不是 AnyObject。应该是:

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { //... }

第二个问题,你的函数需要这样写:

let image2 = CIImage(image: myimage.image!)

这个错误是因为你有写错误标签

CIImage.init(image: <#T##UIImage#>)

你可以这样做

    guard  let image = myimage.image  else {
            return
        }
let image2 = CIImage.init(image: image)

第一个问题: 看起来您的委托方法声明与协议中的声明不匹配,因此它被视为一个单独的方法。 Xcode甚至给出警告:

Instance method 'imagePickerController(picker:didFinishPickingMediaWithInfo:)' nearly matches optional requirement 'imagePickerController(_:didFinishPickingMediaWithInfo:)' of protocol 'UIImagePickerControllerDelegate'

尝试更改此行:

func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {

至:

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any])

UPD:另请阅读@dfd 下面关于如何避免这种(相当常见的)混淆类型的评论。


第二期:正如其他人已经提到的,您应该正确地将参数作为初始化程序传递。只需对您的代码进行最少的更改,它将是:

let image2 = CIImage (image: myimage.image!)! 

但是,感叹号(即强制展开)越少越好;有关这方面的更多信息,请查看 Optional Chaining as an Alternative to Forced Unwrapping.