web-dev-qa-db-fra.com

Quittez l'itération de la boucle for Swift iOS

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?

17
Alk

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.

36
Shades

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.

12
MedAmine.Rihane