es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo agregar una matriz de cadenas a httpBody en Swift.

Normalmente utilizamos diccionarios como parámetros, pero para eliminar fotos, la API con la que trabajo solo necesita el nombre de la imagen como una cadena en un arreglo.

Content-Type: application/json; charset=UTF-8
Content-Length: 80
Authorization: Bearer [token]
["https://work-solution.s3.eu-north-1.amazonaws.com/job-83-image-gpfv7dfy.jpeg"]

Obtuve el método para agregar una sola cadena al cuerpo de la solicitud HTTP con Alamofire:

struct BodyStringEncoding: ParameterEncoding {

    private let body: String

    init(body: String) { self.body = body }

    func encode(_ urlRequest: URLRequestConvertible, with parameters: Parameters?) throws -> URLRequest {
        guard var urlRequest = urlRequest.urlRequest else { throw Errors.emptyURLRequest }
        guard let data = body.data(using: .utf8) else { throw Errors.encodingProblem }
        urlRequest.httpBody = data
        return urlRequest
    }
}

Y eso está bien, pero no sé cómo hacer que este cuerpo sea un arreglo de cadenas y no solo una cadena.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para convertir el cuerpo en una matriz de cadenas en lugar de solo una cadena, puedes modificar el método init en la estructura BodyStringEncoding para que acepte una matriz de cadenas en lugar de una sola cadena, de esta manera:

    init(strings: [String]) { self.body = "[\(strings.compactMap { $0.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) }.joined(separator: ","))]" }
    

    Este código construye una matriz JSON a partir de las cadenas de entrada, codificando cada una de ellas con codificación porcentual para garantizar que sea seguro pasarlas como un componente de la ruta de URL. La llamada a joined(separator:) crea una lista separada por comas de las cadenas codificadas, que se inserta dentro de corchetes para formar una matriz JSON.

    Luego, puedes usar esta codificación de la siguiente manera:

    let imageNames = [ "https://work-solution.s3.eu-north-1.amazonaws.com/job-83-image-gpfv7dfy.jpeg" ]
    let encoding = BodyStringEncoding(strings: imageNames)
    let headers: HTTPHeaders = [
        "Content-Type": "application/json; charset=UTF-8",
        "Authorization": "Bearer [token]"
    ]
    AF.request("https://example.com/deletePhotos", method: .post, headers: headers, encoding: encoding)
    

    Esto enviará una solicitud POST a https://example.com/deletePhotos` con un cuerpo JSON que contiene una matriz de cadenas[“https://work-solution.s3.eu-north-1.amazonaws.com/job-83-image-gpfv7dfy.jpeg”]`, y encabezados que especifican el tipo de contenido y un token de autorización.

Comments are closed.