Alamofire: отправка нескольких параметров в кодировке URL с одним и тем же ключом

#ios #swift #dictionary #alamofire #urlencode

#iOS #swift #словарь #alamofire #urlencode

Вопрос:

Я хочу отправить запрос Alamofire со следующим

 var postParameters=[
    "x" : "value1",
    "y" : "value2",
    "y" : "value3"
]
  

Как мне этого добиться?.

Я не могу предоставить это как какую-либо коллекцию. Мне нужно указать это только как отдельные параметры.

Любой намек будет полезен для меня. Заранее спасибо.

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

Комментарии:

1. Это звучит как проблема XY . Как вы думаете, почему вам нужно это делать? Что вы пытаетесь сделать с таким словарем?

2. я должен отправить запрос Api с такими параметрами

3. Тогда либо это действительно плохо написанный API, либо вы неправильно поняли документацию. Можете ли вы дать ссылку на документы API, в которых говорится, что вам нужен словарь с 2 одинаковыми ключами?

4. Это невозможно сделать. Присвоение значения, второго после ключа (y), заменит предыдущее.

5. @AmuthaPriya Недавно я наткнулся на аналогичный API, который принимал параметры в кодировке URL и несколько значений для одного и того же ключа. К счастью, Alamofire может сделать это просто отлично. Смотрите мой ответ.

Ответ №1:

В iOS невозможно создать подобный dict, вместо этого вы можете выполнять несколько вызовов API.

Ответ №2:

Хотя нет возможности создать словарь с дубликатами ключей, есть способ передать такого рода параметры на ваш сервер с помощью массива:

 let postParameters: [String: Any] = [
    "x" : "value1",
    "y" : ["value2", "value3"]
]
  

затем, когда вы вызываете request функцию Alamofire, вы передаете новый экземпляр Alamofire URLEncoding в качестве encoding параметра и указываете способ, которым вы хотите кодировать массивы, например, так:

 AF.request(
    "url",
    method: .post,
    parameters: postParameters,
    encoding: URLEncoding(arrayEncoding: .noBrackets)
)