无法将“数据”类型的值转换为指定类型“数据”

时间:2018-02-20 12:47:55

标签: swift xcode sms xcode9-beta messageui

我有以下代码,它会截取用户屏幕的屏幕截图,并允许他们通过短信将其作为附件发送给朋友。

func sendSmsToFriend() {
    UIGraphicsBeginImageContext(view.frame.size)
    view.layer.render(in: UIGraphicsGetCurrentContext()!)
    let screenshotImage = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()

    if MFMessageComposeViewController.canSendText() && MFMessageComposeViewController.canSendAttachments() {

        let smsController = MFMessageComposeViewController()

        smsController.body = "Can you please tell me what colour this is?"
        let screenshotImageData: Data = UIImagePNGRepresentation(screenshotImage!)!
        smsController.addAttachmentData(screenshotImageData, typeIdentifier: "data", filename: "screenshotImage.png")
        smsController.messageComposeDelegate = self
        self.present(smsController, animated: true, completion: nil)

    } else {
        print("User cannot send texts or attachments")
    }
}

以上在Xcode的最新稳定公开发布的单独项目中工作正常。

我尝试将代码添加到将在最新的iOS上运行的项目(我相信11.3 beta 2),因此我正在使用Xcode 9.3 Beta 2(2018年6月6日发布)进行开发。

这是测试版中的错误吗?

我收到的错误是该行:

let screenshotImageData: Data = UIImagePNGRepresentation(screenshotImage!)! 然后在下面的线上。

获得:

Cannot convert value of type 'Data' to specified type 'Data'

1 个答案:

答案 0 :(得分:2)

错误消息

  

无法转换类型'数据'的值指定类型'数据'

表示您的应用程序中定义了另一种Data类型 或者某些包含的模块,它与来自的struct Data冲突 基础框架。这是一个独立的示例来演示 问题:

import Foundation

struct Data { }

let d: Data = "abc".data(using: .utf8)!
// Cannot convert value of type 'Data' to specified type 'Data'

您始终可以预先添加模块名称以明确引用该模块中的类型:

let screenshotImageData: Foundation.Data = UIImagePNGRepresentation(screenshotImage!)!

但实际上你根本不需要类型注释,而

let screenshotImageData = UIImagePNGRepresentation(screenshotImage!)!

自动推断出screenshotImageData的类型 右侧的表达式(Foundation.Data)。

当然最好避免这种歧义,而不是 定义另一个Data类型。