私はid
の値を取得したい2つのリンクを持つ配列を持っています。コードは動作しますが、device_id_array
は[88.0, 89.0] and [89.0, 88.0]
の間で変わりますが、これを修正する方法はわかりません。 ご協力いただきありがとうございます。ループJsonリンクSwift
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リンク1: { "ID":88 }
JSONリンク2: { "ID":89 }
UPDATE:
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ではありません。変数名は、* snake_casedではなく* camelCased *とされています。 – vadian
応答と情報をありがとう。残念ながら注文はオプションです。それを同期させる可能性はありますか? –
['DispatchGroup'](https://developer.apple.com/documentation/dispatch/dispatchgroup)を使用して注文を保存する – vadian