【问题标题】:'InfoKey' is not a member type of 'UIImagePickerController'“InfoKey”不是“UIImagePickerController”的成员类型
【发布时间】:2018-07-24 17:27:32
【问题描述】:

我收到此错误:

“InfoKey”不是“UIImagePickerController”的成员类型

我浪费时间搜索这个问题但失败了。

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

Xcode 9.4、Swift 4.1

【问题讨论】:

    标签: swift xcode image uikit


    【解决方案1】:

    您正在尝试使用需要 Xcode 10 的较新的 iOS 12 API。如果您使用的是 Xcode 9.4,那么您使用的是 iOS 11,您需要使用即将推出的旧 API。

    private func imagePickerController(_ picker: UIImagePickerController,
                               didFinishPickingMediaWithInfo info: [String : Any]) {
        picker.dismiss(animated: true, completion: nil)
        guard let image = info[UIImagePickerControllerOriginalImage] as? UIImage else {
            return
        }
    }
    

    【讨论】:

    • 现在工作。谢谢!
    • 我使用 Xcode 10.1 beta 3,但如果我不使用 UIImagePickerControllerOriginalImage,我会看到与原始问题相同的错误。奇怪的是,单击命令会打开本应未定义的InfoKey 结构的定义。嗯?
    • @Theo 您可能还需要确保您使用的是 Swift 4.2(在构建设置/swift 语言版本中)
    • Swift 5 iOS 12 使用guard let image = info[UIImagePickerController.InfoKey.originalImage]
    • @andrewbuilder 您的评论适用于 Swift 4.2 及更高版本。但问题是关于用户试图在旧版本的 Xcode 中使用更新的 API。
    【解决方案2】:

    首先您需要删除private 关键字。可能会添加它以使警告静音。

    您提供的语法来自与 4 不同的 swift 版本

    这是新的

    func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {
        let image = info[UIImagePickerControllerOriginalImage] as? UIImage
    }
    

    【讨论】:

    • 问题中的语法对于 Xcode 10 / Swift 4.2+ 实际上是正确的,当然减去了 private 关键字问题。
    猜你喜欢
    • 2022-12-11
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-17
    相关资源
    最近更新 更多