iOS: Swift 2 to Swift 3: 将字符串转换为数据
iOS: Swift 2 to Swift 3: Convert Strings to Data
帮我把代码从 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" 函数的替代方法来将所有这些数据和字符串连接在一起。
我的主要错误是使用追加函数:
body.append("--\(boundary)\r\n")
错误:无法将类型 'String' 的值转换为预期的参数类型 'Data'
请帮助找到该问题的解决方案!
提前致谢...
我怀疑代码在 Swift 2.
中是否有效
您将用字符串组成正文,return 结果字符串为 Data
。在 Swift 3 NSData
中已替换为原生结构 Data
.
错误发生是因为您创建了一个 NSMutableData
实例,然后您尝试附加 String
s,这是不可能的。
此版本使用 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
}
解决方案如下:
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!)
}
}
帮我把代码从 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" 函数的替代方法来将所有这些数据和字符串连接在一起。 我的主要错误是使用追加函数:
body.append("--\(boundary)\r\n")
错误:无法将类型 'String' 的值转换为预期的参数类型 'Data'
请帮助找到该问题的解决方案!
提前致谢...
我怀疑代码在 Swift 2.
中是否有效您将用字符串组成正文,return 结果字符串为 Data
。在 Swift 3 NSData
中已替换为原生结构 Data
.
错误发生是因为您创建了一个 NSMutableData
实例,然后您尝试附加 String
s,这是不可能的。
此版本使用 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
}
解决方案如下:
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!)
}
}