J'ai une fonction avec une boucle for à l'intérieur:
func example() {
// create tasks
for link in links {
let currIndex = links.indexOf(link)
if let im = story_cache?.objectForKey(link) as? UIImage {
if ((currIndex != nil) && (currIndex < content.count)) {
if (content[currIndex!].resource_type == "image") {
content[currIndex!].image = im
return
}
}
} else {
if ((currIndex != nil) && (currIndex < content.count)) {
if (content[currIndex!].resource_type == "video") {
let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)
let documentsDirectory : NSString = paths[0]
let appFile = documentsDirectory.stringByAppendingPathComponent(content[currIndex!].id! + ".mov")
let local_URL = NSURL(fileURLWithPath: appFile)
if let cached_URL = story_cache?.objectForKey(local_URL) as? NSURL {
content[currIndex!].videoURL = cached_URL
return
}
}
}
}
let dltask = session.dataTaskWithURL(link, completionHandler: { (data, response, error) in
// MORE CODE.....
})
}
}
Fondamentalement, ce que je veux réaliser, c'est que si nous atteignons l'une des instructions return
, le code finit de s'exécuter pour ce link
particulier dans la boucle, et la boucle passe au lien suivant. Si AUCUNE des instructions de retour n'est atteinte, je veux que le dltask
soit exécuté. Je pourrais y parvenir en utilisant un tas de déclarations else, mais je pense que cela rendrait le code assez désordonné. Suis-je bien en utilisant return
?
Vous recherchez continue
:
De Apple Swift Book :
L'instruction continue indique à une boucle d'arrêter ce qu'elle fait et de recommencer au début de l'itération suivante dans la boucle. Il dit "J'en ai fini avec l'itération de la boucle actuelle" sans quitter complètement la boucle.
Remplacez simplement return
par continue
et il reviendra à la boucle for
et le réexécutera avec le lien suivant.
Vous pouvez utiliser break outer
ou seulement break
pour quitter l'instruction de boucle et exécuter la dltask.
j'espère que ça aide.