Swift 4.2图像选择器控制器问题
尝试将聊天客户端从swift 4传递到swift 4.2,我发现了问题 UIImagePickerControllerEditedImage无法为类型的值下标 具有类型索引的“[String:Any]” 'UIImagePickerController.InfoKey'Swift 4.2图像选择器控制器问题,swift,uiimagepickercontroller,swift4.2,Swift,Uiimagepickercontroller,Swift4.2,尝试将聊天客户端从swift 4传递到swift 4.2,我发现了问题 UIImagePickerControllerEditedImage无法为类型的值下标 具有类型索引的“[String:Any]” 'UIImagePickerController.InfoKey' 方法签名已更改为 func-imagePickerController(\uPicker:UIImagePickerController,didFinishPickingMediaWithInfo:[UIImagePickerC
方法签名已更改为
func-imagePickerController(\uPicker:UIImagePickerController,didFinishPickingMediaWithInfo:[UIImagePickerController.InfoKey:Any])
您应该会看到func名称的警告消息
实例方法
“imagePickerController(:didFinishPickingMediaWithInfo:)”几乎
符合可选要求
协议的“imagePickerController(:didFinishPickingMediaWithInfo:)”
“UIImagePickerControllerDelegate”
候选对象具有不匹配的类型“(UIImagePickerController,[字符串:
任何]->()'
将“imagePickerController(\uuxFinishPickingMediaWithInfo:)”移动到
另一个延长沉默这一警告
将“imagePickerController(uxFinishPickingMediaWithInfo:)”设为私有
让这个警告安静下来
要求“imagePickerController(ux0:didFinishPickingMediaWithInfo:)”
在此处声明(UIKit.UIImagePickerControllerDelegate)
像这样
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey: Any]) {
picker.dismiss(animated: true, completion: nil)
let image = info[UIImagePickerController.InfoKey.originalImage]! as! UIImage
...
}
在Swift 4.2 imagePickerController中,委托方法发生了一些变化。请查看下面的代码
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
var selectedImage: UIImage?
if let editedImage = info[.editedImage] as? UIImage {
selectedImage = editedImage
self.profileImage.image = selectedImage!
picker.dismiss(animated: true, completion: nil)
} else if let originalImage = info[.originalImage] as? UIImage {
selectedImage = originalImage
self.profileImage.image = selectedImage!
picker.dismiss(animated: true, completion: nil)
}
}
这肯定会奏效。Swift4.2
//MARK:- ImagePicker Controller Delegate
//MARK:-
func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
dismiss(animated: true, completion: nil)
}
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
if let chosenImage = info[.originalImage] as? UIImage {
yourimage.contentMode = .scaleAspectFill
yourimage.image = chosenImage
} else{
print("Something went wrong")
}
}
上面的代码解决了警告,图像成功上传我将移动self.profileImage.image=选择图像!picker.disclose(动画:true,完成:nil)在“if/else”语句之外。@Paragon yes您可以“picker.disclose(动画:true,完成:nil)”将其置于条件之外。谢谢->让image=info[.editeImage]作为?UIImagePlease编辑答案以使用纯文本代码块而不是代码图像。
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
if let pickedImage = info[UIImagePickerController.InfoKey.editedImage] as? UIImage {
yourImage.image = pickedImage
}else{
print("Something went wrong!!")
}
}
extension CameraViewController: UIImagePickerControllerDelegate, UINavigationControllerDelegate {
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
if let chosenImage = info[.originalImage] as? UIImage {
selectedImage = chosenImage
photo.image = chosenImage
}
dismiss(animated: true, completion: nil)
}
}
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
if let pickedImage = info[UIImagePickerController.InfoKey.editedImage] as? UIImage {
yourImage.image = pickedImage
}else{
print("Something went wrong!!")
}
}