【发布时间】:2018-03-30 04:39:04
【问题描述】:
我有一个包含两个链接的数组,我想在其中获取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: { “身份证”:88 }
Json Link2: { “身份证”: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 -
感谢您的回复和信息。不幸的是,订购是一种选择。是否有可能同步进行?
-
您可以使用
DispatchGroup保持订单 -
我更新了我的问题,试图实现 DispatchGroup。但没有成功。还有其他提示吗?
标签: json swift xcode get-request getresponse