moya 中的多部分表单数据,具有 swift 中的 int 值
multipart form-data in moya with an int value in swift
我正在尝试使用 moya 将带有 post 请求的表单数据发送到 API。
我搜索了堆栈溢出并发现了一些与我的问题相似的问题,但我遇到了一些错误,我将在下面 post。
This and This 是我为我的问题阅读的两个参考资料
[![这些是我应该发送的密钥][3]][3]
Cannot convert value of type 'Int' to expected argument type '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)
}
}
试试这个,应该会有帮助
我正在尝试使用 moya 将带有 post 请求的表单数据发送到 API。 我搜索了堆栈溢出并发现了一些与我的问题相似的问题,但我遇到了一些错误,我将在下面 post。 This and This 是我为我的问题阅读的两个参考资料 [![这些是我应该发送的密钥][3]][3]
Cannot convert value of type 'Int' to expected argument type '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)
}
}
试试这个,应该会有帮助