Swift3 iOS:Swift 2到Swift 3:将字符串转换为数据

Swift3 iOS:Swift 2到Swift 3:将字符串转换为数据,swift3,swift2,append,type-conversion,Swift3,Swift2,Append,Type Conversion,请帮助我将代码和平从Swift 2转换为Swift 3: func createBodyWithParameters(parameters: [String: String]?, filePathKey: String?, imageDataKey: NSData, boundary: String) -> NSData { let body = NSMutableData(); if parameters != nil { for (key, value

请帮助我将代码和平从Swift 2转换为Swift 3:

func createBodyWithParameters(parameters: [String: String]?, filePathKey: String?, imageDataKey: NSData, boundary: String) -> NSData {
    let body = NSMutableData();

    if parameters != nil {
        for (key, value) in parameters! {
            body.appendString("--\(boundary)\r\n")
            body.appendString("Content-Disposition: form-data; name=\"\(key)\"\r\n\r\n")
            body.appendString("\(value)\r\n")
        }
    }
            let filename = "user-profile.jpg"
            let mimetype = "image/jpg"

            body.appendString("--\(boundary)\r\n")
            body.appendString("Content-Disposition: form-data; name=\"\(filePathKey!)\"; filename=\"\(filename)\"\r\n")
            body.appendString("Content-Type: \(mimetype)\r\n\r\n")
            body.appendData(imageDataKey)
            body.appendString("\r\n")

    body.appendString("--\(boundary)--\r\n")

    return body
}
所有变量类型都应该相同。 问题是找到“appendString”函数的替代方法,将所有这些数据和字符串连接在一起。 我的主要错误是使用append函数:

body.append("--\(boundary)\r\n")
错误:无法将“字符串”类型的值转换为预期的参数类型“数据”

请帮我找到那个问题的解决办法


提前感谢…

我怀疑该代码在Swift 2中是否有效

您将用字符串组成正文,并将结果字符串作为
Data
返回。在Swift 3中,NSData已替换为本机结构
数据

出现此错误的原因是您创建了一个
NSMutableData
实例,然后尝试附加
字符串
s,这是不可能的

此版本使用Swift 3命名约定(
createBody(带参数:…
),创建复合字符串,将字符串转换为
数据
,并附加图像数据和后缀

func createBody(with parameters: [String: String]?, filePathKey: String?, imageDataKey: Data, boundary: String) -> Data
{
    var body = ""

    if let params = parameters {
        for (key, value) in params {
            body += "--\(boundary)\r\n"
            body += "Content-Disposition: form-data; name=\"\(key)\"\r\n\r\n"
            body += "\(value)\r\n"
        }
    }
    let filename = "user-profile.jpg"
    let mimetype = "image/jpg"

    body += "--\(boundary)\r\n"
    body += "Content-Disposition: form-data; name=\"\(filePathKey!)\"; filename=\"\(filename)\"\r\n"
    body += "Content-Type: \(mimetype)\r\n\r\n"

    var data = body.data(using: .utf8)!
    data.append(imageDataKey)
    data.append("\r\n--\(boundary)--\r\n".data(using: .utf8)!)

    return data
}
解决方案如下所示:

func createBodyWithParameters(parameters: [String: String]?, filePathKey: String?, imageDataKey: NSData, boundary: String) -> NSData {

    let body = NSMutableData()

    if parameters != nil {
        for (key, value) in parameters! {
            body.appendString(string: "--\(boundary)\r\n")
            body.appendString(string: "Content-Disposition: form-data; name=\"\(key)\"\r\n\r\n")
            body.appendString(string: "\(value)\r\n")
        }
    }

    let filename = "logo.jpg"
    let fileNo2 = imageView.image;
    print("fileNo2")
    let mimetype = "image/jpg"

    body.appendString(string: "--\(boundary)\r\n")
    body.appendString(string: "Content-Disposition: form-data; name=\"\(filePathKey!)\"; filename=\"\(filename)\"\r\n")
    body.appendString(string: "Content-Type: \(mimetype)\r\n\r\n")
    body.append(imageDataKey as Data)
    body.appendString(string: "\r\n")



    body.appendString(string: "--\(boundary)--\r\n")

    return body
}

extension NSMutableData {

func appendString(string: String) {
    let data = string.data(using: String.Encoding.utf8, allowLossyConversion: true)
    append(data!)
}
}

FWIW,我相信这段代码是从改编而来的,它现在包含了一个Swift 3实现。谢谢Rob,它很有帮助!!!