首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“UIImage?”不可转换为“UIImage”发行

“UIImage?”不可转换为“UIImage”发行
EN

Stack Overflow用户
提问于 2019-07-05 04:57:40
回答 3查看 1.5K关注 0票数 3

我正在尝试实现一个图像选择器。在委托方法中,我得到以下错误。

这是我写的代码

代码语言:javascript
复制
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
    var image = info[.editedImage] as? UIImage
    if image == nil {
        image = info[.originalImage] as? UIImage
    }

    simpleImagePicker!.dismiss(animated: true)
}

我用Swift 5尝试了一下,它没有出错。但问题在于Swift 4。

如何解决这个问题?有什么解决办法吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-07-05 05:09:29

对于不同的Swift版本,UIImagePickerControllerDelegate签名是不同的。您使用的是SWIFT4.2及更高版本的方法,这与SWIFT4.0有很大的不同。

Swift 4.0:

代码语言:javascript
复制
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
    if let editedImage = info[UIImagePickerControllerEditedImage] as? UIImage {

    } else if let originalimage = info[UIImagePickerControllerOriginalImage] as? UIImage {

    }
}

Swift 4.2和Swift 5:

代码语言:javascript
复制
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
    if let image = info[UIImagePickerController.InfoKey.editedImage] as? UIImage {

    } else if let image = info[UIImagePickerController.InfoKey.originalImage] as? UIImage {

    } else {
        print("Something went wrong")
    }
}

所以,检查适当的快速版本,并遵循正确的方法!

票数 3
EN

Stack Overflow用户

发布于 2019-07-05 05:18:40

我用Swift 5尝试了一下,它没有出错。但问题在于Swift 4。

首先,如果您正在使用Xcode 10.x,我强烈建议您执行Swift 5更新。忘记Swift 4,保持更新。

其次,这是Swift 5上正确的UIImagePickerControllerDelegate实现:

代码语言:javascript
复制
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
    if let image = info[UIImagePickerController.InfoKey.originalImage] as? UIImage {
        // do stuff with your original image...

    } else if let image = info[UIImagePickerController.InfoKey.editedImage] as? UIImage {
        // do something with your edited image...
    }
    dismiss(animated: true, completion: nil)
}

无论如何,如果您想坚持使用Swift 4,这是要使用的ImagePicker委托函数:

代码语言:javascript
复制
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
        if let chosenImage = info[UIImagePickerControllerOriginalImage] as! UIImage {
            // do stuff with your image
        } else if let chosenImage = info[UIImagePickerControllerOriginalImage] as! UIImage {
            // do stuff with your image
        }
        dismiss(animated:true, completion: nil)
}
票数 1
EN

Stack Overflow用户

发布于 2019-07-05 05:23:55

主要的问题是Swift 4中没有UIImagePickerController.InfoKey。编译器无法定义这种类型,如果您使用正确的签名(带有字符串),则会导致错误:任何字典,错误都会消失。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56896762

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档