Swift 4.2 imagePickerController问题

问题描述 投票:6回答:6

试图将聊天客户端从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)
}
swift uiimagepickercontroller swift4.2
6个回答
15
投票

方法签名已更改为

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)


7
投票

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

}

这肯定会起作用。


4
投票

像这样

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

2
投票

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

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

0
投票
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)
    }
}

上面的代码解决了成功上传的警告和图片

© www.soinside.com 2019 - 2024. All rights reserved.