试图将聊天客户端从swift 4传递到swift 4.2并且使用选择器我发现了麻烦。
UIImagePickerControllerEditedImage //无法使用索引类型为“UIImagePickerController.InfoKey”的类型'[String:Any]'下标
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
if let pickedImage = info[UIImagePickerControllerEditedImage] as? UIImage {
self.userProfileImage.contentMode = .scaleAspectFit
self.userProfileImage.image = pickedImage
}
picker.dismiss(animated: true, completion: nil)
}
方法签名已更改为
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any])
您应该看到func名称的警告消息
实例方法'imagePickerController(:didFinishPickingMediaWithInfo :)'几乎匹配协议'UIImagePickerControllerDelegate'的可选要求'imagePickerController(:didFinishPickingMediaWithInfo :)'
候选人有非匹配类型'(UIImagePickerController,[String:Any]) - >()'
将'imagePickerController(_:didFinishPickingMediaWithInfo :)'移动到另一个扩展名以使此警告静音
将'imagePickerController(_:didFinishPickingMediaWithInfo :)'私有化以使此警告无声
要求'imagePickerController(_:didFinishPickingMediaWithInfo :)'在这里声明(UIKit.UIImagePickerControllerDelegate)
在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)
}
}
这肯定会起作用。
像这样
private func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey: Any]) {
picker.dismiss(animated: true, completion: nil)
let image = info[UIImagePickerController.InfoKey.originalImage]! as! UIImage
...
}
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")
}
}
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)
}
}
上面的代码解决了成功上传的警告和图片