2017-02-21 76 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 
}