3 votes

données de formulaire multipartites dans moya avec une valeur int dans swift

J'essaie d'envoyer les données d'un formulaire avec une requête post à l'API avec moya. J'ai cherché sur stack overflow et j'ai trouvé quelques questions qui étaient similaires à la mienne mais j'obtiens une erreur que je vais poster ci-dessous. Le présent et Le présent sont les deux références que j'ai lues pour mon problème [ ![ Voici les clés que je suis censé envoyer ][3]][3]

Impossible de convertir une valeur de type "Int" en un argument de type "Data".

même j'ai essayé le code ci-dessous :

 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]

Comment dois-je procéder pour résoudre ce problème ?

UPDATE :

    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)

enter image description here

enter image description here

6voto

arturdev Points 2091

Les données des formulaires multipartites ne peuvent pas avoir d'autres types que Data. Il serait donc préférable de conserver un dictionnaire de type [String:String] et de le convertir en Data.
Exemple :

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)
    }
    ....
}    

\===============
EDITAR:

Pour les demandes non multipartites :

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"]
}

3voto

Am1rFT Points 117

Rien de spécial à faire !!!

public var task: Task {
    switch self {

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

    }

    }

Essayez ceci, cela devrait vous aider

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X