web-dev-qa-db-ja.com

forループの反復を終了Swift iOS

その中にforループを持つ関数があります:

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.....
    })
  }
}

基本的に私が達成したいのは、returnステートメントのいずれかに到達すると、ループ内のこの特定のlinkのコードの実行が終了し、ループが次のリンクに移動することです。 return文のどれにも達していない場合、dltaskを実行したいです。たくさんのelseステートメントを使用してこれを実現できましたが、コードが非常に面倒になると思います。 returnを使用してこれを正しく行っていますか?

17
Alk

continueを探しています:

から AppleのSwift Book

Continueステートメントは、ループに実行中の処理を停止し、ループの次の反復の開始時に再び開始するように指示します。ループを完全に終了することなく、「現在のループの反復処理が完了しました」と表示されます。

returncontinueに置き換えるだけで、forループに戻り、次のリンクで再度実行します。

36
Shades

ループステートメントを終了してdltaskを実行するには、break outerまたはbreakのみを使用できます。

それが役立つことを願っています。

12
MedAmine.Rihane