J'essaie d'avoir des emplacements tracés sur une carte, l'un après l'autre avec 1 seconde entre chaque emplacement tracé, mais cela ne fonctionne pas tout à fait. Voici ce que j'ai jusqu'à présent:Créer plusieurs méthodes DispatchQueue.main.asyncAfter à la fois dans Swift 3
@IBAction func playButtonPressed(_ sender: Any) {
var index = 0.0
var i = 0
var j = 0
while i < sites.count {
while j < sites[i].count {
DispatchQueue.main.asyncAfter(deadline: .now() + 1.0*index) {
self.plot(day:i,site:j)
}
j += 1
index += 1
}
j = 0
i += 1
}
}
func plot(day:Int,site:Int) {
for letter in glossary {
let siteToPlot = sites[day][site]
if let location = letter[siteToPlot] {
setUpMap(name: location.name!, lat: location.lat!, long: location.long!)
}
}
}
La façon dont je l'ai mis en place, chaque élément de la boucle aura une méthode appelée dans le DispatchQueue.main.asyncAfter, mais chaque article sera expédié une seconde plus tard . La première sera 0 seconde plus tard, puis 1, puis 2, etc.
Il ne semble pas que les arguments de la fonction plot soient sauvegardés. Cependant, lorsque la fonction plot est appelée pour la première fois, les valeurs du jour et du site sont 9 et 0, qui sont leurs valeurs lorsque la boucle est terminée.
Copie possible de [Valeur de passe à la fermeture?] (http://stackoverflow.com/questions/31565832/pass-value-to-closure) –