Essayer de passer le client de chat de Swift 4 à Swift 4.2 et avec le sélecteur j'ai trouvé des problèmes.
UIImagePickerControllerEditedImage Impossible d'indiquer une valeur de type '[String: Any]' avec un index de type 'UIImagePickerController.InfoKey'.
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)
}
La signature de la méthode a été modifiée en
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any])
Vous devriez voir un message d'avertissement pour le nom de la fonction
La méthode d'instance 'imagePickerController (: didFinishPickingMediaWithInfo :)' 'correspond presque à l'exigence facultative' imagePickerController (: didFinishPickingMediaWithInfo :) 'du protocole' UIImagePickerControllerDelegate '
Le candidat a un type qui ne correspond pas '(UIImagePickerController, [String: Any]) -> ()'
Déplacez 'imagePickerController (_: didFinishPickingMediaWithInfo :)' vers une autre extension pour faire taire cet avertissement.
Rendre 'imagePickerController (_: didFinishPickingMediaWithInfo :)' privé pour faire taire cet avertissement
Condition requise 'imagePickerController (_: didFinishPickingMediaWithInfo :)' a été déclaré ici (UIKit.UIImagePickerControllerDelegate)
Dans Swift 4.2 Les méthodes de délégation imagePickerController ont un peu changé. Veuillez vérifier le code ci-dessous.
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)
}
}
Cela fonctionnera à coup sûr.
comme ça
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)
}
}
Le code ci-dessus a résolu l'avertissement et l'image téléchargée avec succès