使用 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.
**大家好...我正在尝试识别应用程序,只是我有一个图像视图、文本视图和按钮,代码在下面..我的第一个问题是我的图像视图在选择一个后没有改变图片! .. 我的第二个问题,它告诉我 "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.