Быстро, как добавить массив строк в httpBody

#arrays #swift #alamofire #urlsession

Вопрос:

Обычно мы используем словари в качестве параметров, но для удаления API фотографий, с которым я работаю, требуется просто имя строки этого изображения в массиве.

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

У меня есть метод добавления одной строки в httpBody с помощью Alamofire:

 struct BodyStringEncoding: ParameterEncoding {   private let body: String   init(body: String) { self.body = body }   func encode(_ urlRequest: URLRequestConvertible, with parameters: Parameters?) throws -gt; 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  } }  

И это нормально, но я не знаю, как сделать это тело массивом с одной строкой, а не просто строкой.

Ответ №1:

Вы можете сделать:

 let bodyData = try? JSONSerialization.data(withJSONObject: yourArray)  

с последующим

 let bodyString = String(data: body, encoding: .utf8)  

Есть разворачивание, и нужно/успеть написать, но вы поняли идею.

Эту строку guard let data = body.data(using: .utf8) else { throw Errors.encodingProblem } можно упростить let data = Data(body.utf8) , не нужно разворачивать.

Наконец, поскольку вы делаете

 Array  -- JSONSerialization.data(withJSONObject: theArray) --gt;  Data  -- String(data: theData, encoding: .utf8) --gt;  String  -- Data(theString.utf8) --gt;  Data  

Возможно, вам захочется переписать свой объект, избегая ненужных преобразований:

 struct BodyStringEncoding: ParameterEncoding {   private let body: Data   init(body: String) { self.body = Data(body.utf8) }   init(body: Data) { self.body = body }   func encode(_ urlRequest: URLRequestConvertible, with parameters: Parameters?) throws -gt; URLRequest {  guard var urlRequest = urlRequest.urlRequest else { throw Errors.emptyURLRequest }  urlRequest.httpBody = self.body  return urlRequest  } }