Swift3 iOS:Swift 2到Swift 3:将字符串转换为数据
请帮助我将代码和平从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
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,它很有帮助!!!