Swift 4.2 imagePickerController问题

Geo*_*nts 11 uiimagepickercontroller swift swift4.2

试图将聊天客户端从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)
}
Run Code Online (Sandbox Code Playgroud)

Ash*_*lls 19

方法签名已更改为

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)


Pur*_*roy 9

在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)
    }

}
Run Code Online (Sandbox Code Playgroud)

这肯定会起作用.


小智 5

像这样

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey: Any]) {
    picker.dismiss(animated: true, completion: nil)
    let image = info[UIImagePickerController.InfoKey.originalImage]! as! UIImage
    ...
}
Run Code Online (Sandbox Code Playgroud)