Проблема с кодом Swift, чтобы сделать приложение распознавания - PullRequest
0 голосов
/ 05 мая 2018

** всем привет ... Я пытаюсь сделать приложение распознаваемым, просто у меня есть изображение, текст, кнопка и код ниже ... моя первая проблема в том, что мое изображение не меняется после выбора картинки! .. моя вторая проблема, которая говорит мне, что «Метка аргументов image1 не соответствует ни одной доступной перегрузке» любая помощь пожалуйста?

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

Ответы [ 3 ]

0 голосов
/ 05 мая 2018

Эта ошибка, потому что у вас есть метка ошибки записи

CIImage.init (изображение: <# T ## UIImage #>)

вы можете сделать это так

    guard  let image = myimage.image  else {
            return
        }
let image2 = CIImage.init(image: image)
0 голосов
/ 05 мая 2018

Первая проблема: Похоже, объявление вашего метода делегата не совпадает с объявленным в протоколе, поэтому оно рассматривается как отдельный метод. Xcode даже выдает предупреждение:

Метод экземпляра 'imagePickerController (picker: didFinishPickingMediaWithInfo :)' почти соответствует необязательному требованию 'imagePickerController (_: didFinishPickingMediaWithInfo :)' протокола '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!)! 

Тем не менее, чем меньше восклицательных знаков (т. Е. Разворачивание силы), тем лучше; для получения дополнительной информации об этом, отметьте Дополнительное сцепление как альтернативу принудительной распаковке .

0 голосов
/ 05 мая 2018

Ваша первая проблема в том, что вы пропускаете _ в своем делегатском вызове, непосредственно перед picker:, и вам нужно написать Any вместо AnyObject. Должно быть:

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

Вторая проблема, ваша функция должна быть написана так:

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