我需要找到一种方法来执行代码几次,根据数组“MisCursos”中包含的元素编辑链接,但我的问题是在DispatchQueue.main.async中,因为这将在循环内部如果我只使用一个循环For,替换数组值。
例如 - >
for x in 0...MisCursos.count - 1 {
let urlStringAsistencia = "https://losvilos.ucn.cl/tongoy/asist_marcar4.php?c=\(x)&s=\(idSemestreG)&op=list"
...
}
var AsistenciasAll = [Asistencias]()
var MisCursos = [MisCursosTon]()
MisCursos = [MisCursosTon(id: 639, nombre: "Análisis Financiero (ECIN-01084) {C2}", codigo: "asas", seccion: "C2", rol: "E"), MisCursosTon(id: 61, nombre: "Marketing (ECIN-01083) {C1}", codigo: "asassss", seccion: "C1", rol: "E"), MisCursosTon(id: 400, nombre: "Sistemas De Información I (ECIN-00986) {C1}", codigo: "asas", seccion: "C1", rol: "E")]
let urlStringAsistencia = "https://losvilos.ucn.cl/tongoy/asist_marcar4.php?c=\(x.id)&s=6&op=list"
let urlAsistencia = URL(string: urlStringAsistencia)
URLSession.shared.dataTask(with:urlAsistencia!) { (data, response, error) in
if error != nil {
print(error!)
} else {
do {
let parsedData = try JSONSerialization.jsonObject(with: data!, options: []) as! NSDictionary
for (key, value) in parsedData {
...
let user = Asistencias(idCurso: 12, idAsistencia: key as! String, fecha: fecha, bloque: bloque, rut: rut, nombres: nombres, apellidos: apellidos, estado: estado, razon: razon, imgurl: imgURL)
AsistenciasAll.append(user)
}
} catch let error as NSError {
print(error)
}
DispatchQueue.main.async {
let alertController = UIAlertController(title: "Error al Descargar Datos", message: "Al parecer ocurrió un error, vuelve a intentarlo", preferredStyle: .alert)
let okAction = UIAlertAction(title: "Entendido", style: .cancel, handler: {
action in self.dismiss(animated: true, completion: nil)})
alertController.addAction(okAction)
self.present(alertController, animated: true, completion: nil)
}
}.resume()
答案 0 :(得分:0)
您需要的API是curl -sL https://deb.nodesource.com/setup_7.x | sudo -E bash -
sudo apt-get install -y nodejs
。这将允许您将一堆异步任务组合在一起,并在所有这些任务完成时通知您。我将概述您需要的基本知识:
DispatchGroup
您可能还需要跟踪哪些任务(如果有)失败,以便您可以通知用户。
注意:即使任务失败,在每个完成处理程序中调用let group = DispatchGroup()
for url in urls {
// tell the group that a new task is being added
group.enter()
URLSession.shared.dataTask(with:urlAsistencia!) { (data, response, error) in
// do parsing
// tell the group that a task is done
group.leave()
}.resume()
}
group.notify(queue: DispatchQueue.main) {
// create summary alert
}
也很重要。否则,该小组将永远等待它认为仍然未完成的任务。