2017-02-21 73 views
0

帮我的代码转换成和平从斯威夫特2至3斯威夫特:的iOS:斯威夫特2斯威夫特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”函数的替代方法来将所有这些数据和字符串连接在一起。 我的主要错误是使用附加功能:

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

错误:无法转换类型“字符串”到期望的参数类型的值“数据”

请帮忙找到问题的解决方案!

在此先感谢...

+1

FWIW,相信代码[此答案](http://stackoverflow.com/a/26163136/1271826),其现在包括一个被改编Swift 3的实现。 – Rob

+0

感谢罗布,它有帮助! –

回答

0

解决方案是这样的:

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!) 
} 
} 
0

我怀疑的是,即使代码工作在斯威夫特2

你将构成身体出字符串,并返回结果字符串作为Data。在Swift 3中NSData已被替换为本地结构Data

发生错误是因为您创建了一个NSMutableData实例,然后尝试追加String,这是不可能的。

该版本使用Swift 3命名约定(createBody(with parameters:...),创建复合字符串,将字符串转换为Data并追加图像数据和后缀。

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 
}