繁体   English   中英

moya中的多部分表单数据,swift中的int值

[英]multipart form-data in moya with an int value in swift

我正在尝试使用moya将带有post请求的表单数据发送到API。 我搜索了堆栈溢出,发现了一些与我类似的问题,但是我收到了一些错误,我将在下面发布。 是我为我的问题阅读的两个参考文献[![ 这些是我应该发送的密钥 ] [3]] [3]

无法将'Int'类型的值转换为预期的参数类型'Data'

甚至我尝试了下面的代码:

 let memberIdData = memberID.data(using: String.Encoding.utf8) ?? Data()




let data = ["id":0,
                    "AddressLine":EntAddressLine.text,
                    "CityId":selectedCity,
                    "Mobile":EntMobile.text,
                    "PostalCode":EntPostalCode.text,
                    "ProvinceId":selectedProvince,
                    "Tel":EntTelephone.text] as [String : Any]

我该怎么办呢

更新:

    case .AddAddress(let data):
            var multipartData = [MultipartFormData]()
            for (key, value) in params! {
                let Provience = MultipartFormData.init(provider: .data("\(data)".data(using: String.Encoding.utf8)!), name: "id")

                multipartData.append(Provience)
            }
            return .uploadMultipart(multipartData)

在此输入图像描述

在此输入图像描述

多部分表单数据不能包含除数据之外的其他类型。 因此,最好持有类型为[String:String]的字典并将其转换为Data。
例:

var task: Task {
    case .... {
        let params: [String:String] = ["id":"0", //convert to string
                                       "AddressLine":EntAddressLine.text,
                                       "CityId":"\(selectedCity)",  //convert to string
                                       "Mobile":EntMobile.text,
                                       "PostalCode":EntPostalCode.text,
                                       "ProvinceId":"\(selectedProvince)",//convert to string
                                       "Tel":EntTelephone.text]

        var multipartData = [MultipartFormData]()
        for (key, value) in params {
            let formData = MultipartFormData(provider: .data(value.data(using: .utf8)!), name: key)
            multipartData.append(formData)
        }

        return .uploadMultipart(multipartData)
    }
    ....
}    

===============
编辑:

对于非多部分请求:

var task: Task {
        case .... {
            let params: [String:Any] = ["id":0,
                                        "AddressLine":EntAddressLine.text,
                                        "CityId":selectedCity,
                                        "Mobile":EntMobile.text,
                                        "PostalCode":EntPostalCode.text,
                                        "ProvinceId":selectedProvince,
                                        "Tel":EntTelephone.text]

            return .requestParameters(parameters: param, encoding: JSONEncoding.default)
        }
        ....
}

var headers: [String : String]? {
    return ["Content-Type":"application/json"]
}

你应该做什么特别的!!!

public var task: Task {
    switch self {

    case .AddAddress(let data):
        return .requestParameters(parameters: data, encoding: URLEncoding.default)

    }

    }

试试这个,这应该有所帮助

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM