автозаполнение отправить данные ID - PullRequest
0 голосов
/ 31 октября 2018

У меня есть ответ в виде JSON

[
      {
          "id_ser_reg": "103",
          "n_ser_reg": "Operation NOC"
      },
      {
          "id_ser_reg": "120",
          "n_ser_reg": "Freelance"
      }
]

У меня есть поле searchtext и для заголовка отображается «n_ser_reg», но если я выберу «n_ser_reg», я тоже хочу получить «id_ser_reg», я попробую alamofire для получения ответа, но я не знаю, как получить "n_ser_reg" с "id_ser_reg" одновременно.

enter image description here

это изображение для получения n_ser_reg, и я хочу, если я нажму кнопку "cari" id_ser_reg, которую я отправлю, а не n_ser_reg

enter image description here

UPDATE

У меня есть ссылка, в которой ссылка ID_ser_reg необходима, но в пользовательском интерфейсе она должна отображать n_ser_reg, поэтому мне нужно отобразить n_ser_reg, и когда кнопка нажата, id_ser_reg, который принадлежит n_ser_reg, отправляется на ссылку

Ответы [ 2 ]

0 голосов
/ 31 октября 2018

Вы можете использовать codable для сериализации данных и сохранения массива словарей вместо добавления двух разных массивов имени и идентификатора.

Я добавил данные в массив:

let tempArray : [[String:Any]] = [["id_ser_reg":"103",
                                   "n_ser_reg":"Operation NOC",
                                   ],
                                  ["id_ser_reg":"120",
                                   "n_ser_reg":"Freelance",
    ]
]

и создал jsonData для использования codable:

do {
        let jsonData = try JSONSerialization.data(withJSONObject: tempArray, options: .prettyPrinted)

        print(jsonData)
    } catch let error as NSError {
        print(error)
    } 

Для Codable сначала создайте struct:

struct JsonResponse: Codable {
    var id_ser_reg : String?
    var n_ser_reg : String?
}

и для сериализации:

do {    
        let serverResponseData = try JSONDecoder().decode([JsonResponse].self, from: jsonData)

        print(serverResponseData[0].id_ser_reg!)
    } catch let error as NSError {
        print(error)
}

Как видите, serverResponseData - это массив, теперь имеющий имя и идентификатор в каждом индексе. Codable уменьшит вашу строку кода добавления данных один за другим в массив.

Редактировать

Если вы хотите пойти с тем, что вы сделали. Вы можете сделать еще одну вещь.

Создать массив как:

var arrayData = [[String:Any]]()

и в вашем ответе:

if let dictionaryArray = data as? [[String:Any]] {
    self.arrayData = dictionaryArray
}

Теперь у вас есть массив словарей, которые вы можете использовать, когда вам нужны данные как:

let singleData = self.arrayData[0] as! [String:Any]
print(singleData["id_ser_reg"])
print(singleData["n_ser_reg"])

Изображение, которое вы добавили в вопросе, не объясняет, каков точный пользовательский интерфейс и как вы используете данные для заполнения пользовательского интерфейса. Если возможно, добавьте точный код, а не изображение кода, и добавьте логику интеграции данных с пользовательским интерфейсом в вопросе. Надеюсь, что мой ответ поможет вам добиться того, что вы пытаетесь.

0 голосов
/ 31 октября 2018

Вместо анализа ответа в dictionary, вы должны создать class/struct и проанализировать ваши данные в нем.

struct Response: Codable {
    var id_ser_reg: String?
    var n_ser_reg: String?
}

Приведенная выше структура соответствует Codable protocol, т. Е. Вы можете использовать ее properties для непосредственного анализа и из JSON ответа.

   if let data = response.data {
        let response = try? JSONDecoder().decode([Response].self, from: data)
        print(response)
    } 
...