2016-09-11 6 views
5

У меня есть функция с цикл внутри него:Выход итерация для цикла Swift IOS

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 в цикле, и цикл переходит к следующей ссылке. Если NONE из операторов возврата достигнуто, я хочу выполнить dltask. Я мог бы достичь этого, используя кучу других заявлений, но я думаю, что это сделает код довольно грязным. Правильно ли я делаю это с помощью return?

ответ

14

Вы ищете continue:

От Apple's Swift Book:

продолжени заявление говорит цикл, чтобы остановить то, что он делает, и начать снова в начале следующей итерации цикла , Он говорит: «Я закончил с текущей итерацией цикла», не выходя из цикла вообще.

Просто замените return с continue, и он будет вернуться к петле for и запустить его снова по следующей ссылке.

5

Вы можете использовать break outer или только break, чтобы выйти из инструкции цикла и выполнить dltask.

надеюсь, что это поможет.