[英]'UIImage?' is not convertible to 'UIImage' issue in swift 4
我正在尝试实现一个图像选择器。 在委托方法中,我收到以下错误。
要么
我写道,这是代码
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。
怎么解决这个? 它有什么解决方案吗?
UIImagePickerControllerDelegate
签名对于不同的Swift版本是不同的。 您使用的是Swift 4.2及更高版本的方法,它与Swift 4.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")
}
}
所以,检查正确的swift版本并遵循正确的方法!
我尝试使用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)
}
主要问题是Swift 4中没有UIImagePickerController.InfoKey。编译器无法定义此类型,导致错误如果您使用[String:Any]字典对swift 4使用正确的签名,则错误将消失
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.