составные данные формы в moya со значением int в swift

Я пытаюсь отправить данные формы с почтовым запросом в API с помощью moya. Я просмотрел переполнение стека и нашел несколько вопросов, которые были похожи на мои, но я получаю сообщение об ошибке, которое я опубликую ниже. Это и Это две ссылки, которые я прочитал для решения своей проблемы [![Это ключи, которые я должен отправить][ 3]][3]

Не удается преобразовать значение типа «Int» в ожидаемый тип аргумента «Данные».

даже я пробовал код ниже:

 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)

введите здесь описание изображения

введите здесь описание изображения


person Am1rFT    schedule 25.09.2018    source источник


Ответы (2)


ничего особенного делать не надо!!!

public var task: Task {
    switch self {

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

    }

    }

попробуй это должно помочь

person Am1rFT    schedule 26.09.2018
comment
Это сработало, но когда я пытаюсь получить отправленные данные, я показываю опцию в начале строк. - person Am1rFT; 26.09.2018
comment
Я думаю, вы должны задать новый вопрос - person Am1rFT; 26.09.2018

Данные составной формы не могут иметь другие типы, кроме данных. Так что лучше иметь словарь с типом [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"]
}
person arturdev    schedule 25.09.2018
comment
Я сделал все, что вы сказали, и все же у меня есть проблема. - person Am1rFT; 26.09.2018
comment
@ItanHant Какая у тебя проблема? - person arturdev; 26.09.2018
comment
Я получаю 200, но в теле ответа, если он возвращает false, это означает, что есть проблема с данными, которые мы отправляем, и я проверяю у администратора, и она сказала, что это должен быть запрос данных формы - person Am1rFT; 26.09.2018
comment
Данные формы и данные составной формы — это разные вещи. Пожалуйста, уточните у администратора, должны ли это быть просто данные формы или составные данные формы. - person arturdev; 26.09.2018
comment
что требуется для данных формы? - person Am1rFT; 26.09.2018
comment
@ItanHant Также проверьте Content-Type, который вы отправляете. - person arturdev; 26.09.2018
comment
Я только что добавил фото, пожалуйста, проверьте это - person Am1rFT; 26.09.2018
comment
@ItanHant Не могли бы вы также добавить скриншот вкладки «Заголовки»? - person arturdev; 26.09.2018
comment
@ItanHant Какой Content-Type ожидает ваш сервер? - person arturdev; 26.09.2018
comment
Я не отправляю, но почтальон отправляет контент-тип: multipart/form-data; граница=----WebKitFormBoundary7MA4YWxkTrZu0gW, - person Am1rFT; 26.09.2018
comment
тип содержимого: multipart/form-data; border=----WebKitFormBoundary7MA4YWxkTrZu0gW этого достаточно? - person Am1rFT; 26.09.2018
comment
Я не могу понять причину использования данных составной формы для этого запроса. Обычно вы используете multipart при загрузке файла на сервер, но в вашем случае вы просто выполняете простой запрос. Почему бы просто не попросить вашего администратора переключиться на application/json? :) - person arturdev; 26.09.2018
comment
Я говорил ему раньше, но она сказала, что это понадобится в будущем :) - person Am1rFT; 26.09.2018
comment
Тогда вам определенно стоит воспользоваться моим первым решением. Но для отладки запроса, который вы отправляете, я предлагаю вам использовать Charles Proxy Debugging Tool. charlesproxy.com Установите приложение, запустите его в симуляторе и посмотрите, что CharlesProxy зарегистрировал в разделах "Заголовки" и "Содержание". , и вы найдете ошибку, которую ищете :) Удачи! - person arturdev; 26.09.2018
comment
Поскольку я использую moya, он показывает весь журнал, который мне нужен! - person Am1rFT; 26.09.2018
comment
Это правда, хотя CharlesProxy показывает гораздо больше информации. Тебе решать - person arturdev; 26.09.2018
comment
но я ничего не понял в Чарльзе, как я использовал, - person Am1rFT; 26.09.2018
comment
Что такое FormDataProvider? - person Am1rFT; 26.09.2018