Swift 4.2图像选择器控制器问题

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

尝试将聊天客户端从swift 4传递到swift 4.2,我发现了问题

UIImagePickerControllerEditedImage无法为类型的值下标 具有类型索引的“[String:Any]” 'UIImagePickerController.InfoKey'


方法签名已更改为

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!!")
        }
    }