我正在尝试实现一个图像选择器。在委托方法中,我得到以下错误。

或

这是我写的代码
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
var image = info[.editedImage] as? UIImage
if image == nil {
image = info[.originalImage] as? UIImage
}
simpleImagePicker!.dismiss(animated: true)
}我用Swift 5尝试了一下,它没有出错。但问题在于Swift 4。
如何解决这个问题?有什么解决办法吗?
发布于 2019-07-05 05:09:29
对于不同的Swift版本,UIImagePickerControllerDelegate签名是不同的。您使用的是SWIFT4.2及更高版本的方法,这与SWIFT4.0有很大的不同。
Swift 4.0:
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
if let editedImage = info[UIImagePickerControllerEditedImage] as? UIImage {
} else if let originalimage = info[UIImagePickerControllerOriginalImage] as? UIImage {
}
}Swift 4.2和Swift 5:
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
if let image = info[UIImagePickerController.InfoKey.editedImage] as? UIImage {
} else if let image = info[UIImagePickerController.InfoKey.originalImage] as? UIImage {
} else {
print("Something went wrong")
}
}所以,检查适当的快速版本,并遵循正确的方法!
发布于 2019-07-05 05:18:40
我用Swift 5尝试了一下,它没有出错。但问题在于Swift 4。
首先,如果您正在使用Xcode 10.x,我强烈建议您执行Swift 5更新。忘记Swift 4,保持更新。
其次,这是Swift 5上正确的UIImagePickerControllerDelegate实现:
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
if let image = info[UIImagePickerController.InfoKey.originalImage] as? UIImage {
// do stuff with your original image...
} else if let image = info[UIImagePickerController.InfoKey.editedImage] as? UIImage {
// do something with your edited image...
}
dismiss(animated: true, completion: nil)
}无论如何,如果您想坚持使用Swift 4,这是要使用的ImagePicker委托函数:
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
if let chosenImage = info[UIImagePickerControllerOriginalImage] as! UIImage {
// do stuff with your image
} else if let chosenImage = info[UIImagePickerControllerOriginalImage] as! UIImage {
// do stuff with your image
}
dismiss(animated:true, completion: nil)
}发布于 2019-07-05 05:23:55
主要的问题是Swift 4中没有UIImagePickerController.InfoKey。编译器无法定义这种类型,如果您使用正确的签名(带有字符串),则会导致错误:任何字典,错误都会消失。
https://stackoverflow.com/questions/56896762
复制相似问题