Ios 使用Alamofire上载图像时崩溃

Ios 使用Alamofire上载图像时崩溃,ios,swift,alamofire,Ios,Swift,Alamofire,我正在用Alamofire上传一张图像,就像这样 编辑:这是已编辑的代码 for img in images { let url = "http:my url" let headers = [ "Accept": "application/json", "Authorization": self.accessToken ] if let imageData = (UIImageJPEGRepresentati

我正在用Alamofire上传一张图像,就像这样

编辑:这是已编辑的代码

    for img in images {

    let url = "http:my url"
    let headers = [

           "Accept": "application/json",
           "Authorization": self.accessToken
       ]

if let imageData = (UIImageJPEGRepresentation(img, 0.6)) {
let parameters: [String: String]  =
            [

                  "seller_id": "\(self.mySellerId)",
                 "offline_id": self.prodID,
                 "is_default": "1",
                "sequence": "\(sequenceCount)"
           ]

    Alamofire.upload(multipartFormData: {(multipartFormData) in
               let filePath = NSURL(fileURLWithPath: url)

                    print(imageData)

                    multipartFormData.append (imageData, withName: "image", fileName: "\(Date().timeIntervalSince1970).jpg", mimeType: "image / jpg")


                    for (key, value ) in parameters {
                        print(key,value)

                        multipartFormData.append(value.data(using: .utf8)!, withName: key)
                    }
                }, to: url, method: .post, headers: headers)
                { (result) in
                    switch result {
                    case .success(let upload, _,_ ):


                        upload.uploadProgress(closure: { (progress) in
                            UILabel().text = "\((progress.fractionCompleted * 100)) %"
                            print (progress.fractionCompleted * 100)

                        })
                        upload.responseJSON { response in

                            if let JSON = response.result.value {
                                print(JSON)
                            }else{
                                print("Error")
                            }
                        }
                    case .failure(let encodingError):
                        print(encodingError)
                        break
                    }
                }
            }
    }
在参数中的(键、值)部分
for…
for循环遍历所有值。但是当它到达图像数据部分时,它崩溃了,说
无法将'Foundation.data'(0x10787b9f0)类型的值强制转换为'Swift.String'


应该给出什么来纠正错误?

您正在将
参数
字典中的所有值转换为
字符串
,字典中的第一个条目是
“product\u image”
,它的值为imageData,类型为
Data

我会这样做,不再强制施法

for (key, value) in parameters {
    if let v = value as? String, let valueAsData = v.data(using: .utf8) {
        multipartFormData.append(valueAsData, withName: key )
    }
}
您还可以检查值是否已经是
数据
类型,只需添加它,就像:

for (key, value) in parameters {
    var dataToAppend: Data?
    if let data = value as? Data {
        dataToAppend = data
    } else if let v = value as? String, let valueAsData = v.data(using: .utf8) {
        dataToAppend = valueAsData
    }

    if let d = dataToAppend {
        multipartFormData.append(d, withName: key )
    }
}

当您将for循环转到键中时,值:
“product\u image”,imageData
已经是一个数据对象。不需要将其转换为
数据
,而且它不是字符串,因此您可以将
转换为!字符串
使其崩溃。相反,请检查
值的类,如果它是
数据
,只需将其附加,如果它是字符串,则使用
数据转换它(使用:)
,等等。哦..好的。@Larme如果你不介意的话,你能把它写在代码里吗…?
如果让v=value为?数据{multipartFormData.append(v,withName:key)}否则{//这是一个字符串,至少我们希望是这样,按照您已经做过的那样做)}
只需从参数数据中删除这个
“product_image”:imageData
。由于在多部分中可用,所以在您的中不需要它。好的..我将尝试…好的@Ladislav。第二种方法将附加所有五个键和值:“product_image”、“seller_id”、“offline_id”、“is_default”、“sequence”。但是在这一行
如果让d=dataToAppen…
我得到了在初始化之前使用的错误
常量'dataToAppend'
我的错误,更新了代码,dataToAppend必须是var而不是letNo@Ladislav。只做那件事…还是没用…:(