У меня есть массив с двумя ссылками, где я хочу получить значение id
. Код работает, но device_id_array
варьируется от [88.0, 89.0] and [89.0, 88.0]
, и я не знаю, как это исправить. Спасибо за вашу помощь.
override func viewDidLoad() {
super.viewDidLoad()
device_link_array = ["http://link1.com", "http://link2.com"]
for link in device_link_array {
let url = URL(string: link)
let task = URLSession.shared.dataTask(with: url!) { data, response, error in
if error != nil
{
print("Error")
}else{
if let content = data{
do{
let json = try JSONSerialization.jsonObject(with: content, options: []) as! [String:Any]
if let device_id = json["id"]{
device_id_array.append(device_id as! Double)
}
print(device_id_array)
}catch{}
}
}
}
task.resume()
}
}
Json Link1: { "id": 88}
Json Link2: { "id": 89}
ОБНОВИТЬ:
device_link_array = ["http://link1.com", "http://link2.com"]
let group = DispatchGroup()
for links in device_link_array {
let url = URL(string: links)
group.enter()
let task = URLSession.shared.dataTask(with: url!) { data, response, error in
if error != nil
{
print("Error")
}
else{
if let content = data{
do{
let json = try JSONSerialization.jsonObject(with: content, options: []) as! [String:Any]
if let device_id = json["id"]{
device_id_array.append(device_id as! Double)
}
print(device_id_array)
}catch{}
}
}
group.leave()
}
task.resume()
}
}
dataTask
работает асинхронно, поэтому порядок не гарантируется. Если вам нужен порядок, отсортируйте массив. Кстати:GET
— это запрос по умолчанию. Вам не нужен явный запрос. Просто передайте URL-адрес:dataTask(with: url) ...
И, как вы знаете, JSON — это словарь, зачем приводить его к неуказанномуAnyObject
? Помогите компилятору и приведите его к[String:Any]
. И это не javascript или PHP. Имена переменных должны быть camelCased, а не snake_cased - person vadian   schedule 18.10.2017DispatchGroup
, чтобы сохранить заказ. - person vadian   schedule 18.10.2017