Swift - 如何知道循环何时结束?

10

请原谅我,因为我对Swift和编程一般都非常陌生。

相信我,我已经努力理解这个问题了,但我无法理解,非常感激任何帮助。

假设我有这个函数:

func loop() {
  for var i=0; i<5; i++ {
  println(i)
  }
}

如果我希望在循环完成且运行结束后记录“循环已完成”到日志中,该怎么做?如果我这样做:

func loop() {
  for var i=0; i<5; i++ {
  println(i)
  println("loop has finished")
  }
}

每次i被递增后,"loop has finished"都会被打印出来。

我尝试了解闭包和完成处理程序,但目前还不太理解如何实现上述任务。

如果有人能向我展示如何完成上面的例子,我将感激不尽。

感谢您对我当前孱弱知识的耐心!


1
请确保您仔细阅读并理解@ecatalano给出的答案。理解循环及其背后的逻辑非常重要! - Caleb
2
@dan,我不想听起来很无礼,但是你需要上一门编程课,它不一定要是Swift,任何编程课都可以。试着理解编程的基本原理。你所问的问题非常基础,你可以从任何编程书籍中学到。一旦你理解了这一点,你就可以轻松地学习任何编程语言。所有编程的核心逻辑都是相同的...if、else、for循环、while循环等。 - Sam B
感谢您的评论,我现在正在Udemy上学习编程课程,在循环部分中,讲师没有解释需要在循环完成后执行代码的位置。我试图寻找相关信息,但我想我不知道如何表达。这里的善良人们已经向我解释了这个概念,我非常感激他们这样做。 - dan martin
5个回答

14

为了使用基本的闭包语法来产生与其他人发布的相同的结果:

func printFunction() {
    println("loop has finished")
}

func loopWithCompletion(closure: () -> ()) {
    for var i=0; i<5; i++ {
        println(i)
    }
    closure()
}

这是如何调用它:

 loopWithCompletion(printFunction)

Swift 3更新:

func printFunction() {
    print("loop has finished")
}

// New for loop syntax and naming convention
func loop(withCompletion completion: () -> Void ) {
    for i in 0 ..< 5 {
        print(i)
    }
    completion()
}

然后像这样调用它:

loop(withCompletion: printFunction)

或者
loop {
    print("this does the same thing")
}

非常感谢。在所有出色的答案中选择真的很困难,但我相信这个教会了我最多。再次感谢! - dan martin

7

这是你尝试实现的循环:

func loop() {
  for var i=0; i<5; i++ {
    println(i)
    println("loop has finished")
  }
}

“循环已完成”被打印5次的原因是因为它在for循环中。括号内的任何内容都会在循环重复时运行(我在“输入代码”处输入)。请注意保留HTML标记。
for var i=0; i<5; i++ {
   enter code here
 }

循环的工作方式是重复,直到条件完成:即 i<5。您的 i 变量从 0 开始,就像您在 var i=0 中所述的那样,每次循环重复时,这个数字增加 1,如 i++ 所述。
一旦 i 不小于 5(i 等于 5 或大于 5),则会运行 for 循环后面的代码。
因此,如果您将 println("loop has finished") 放在 for 循环后面,您就知道它将在循环完成时运行,就像这样:
func loop() {
  for var i=0; i<5; i++ {
    println(i)
  }
  println("loop has finished")
}

4
func loop() {
  for var i=0; i<5; i++ {
    println(i)
  }
  println("loop has finished")
}

3
你的代码无法运行的原因是你将println()语句放在了循环内部,像这样:
func loop() {
  for var i=0; i<5; i++ {
  println(i)
  println("loop has finished")
  }
}

每次循环结束时,它都会打印出“Finished”。为了解决这个问题,你只需要将println()语句放在循环后面,像这样:
func loop() {
  for var i=0; i<5; i++ {
    println(i)
  }
  println("loop has finished")
}

完成了。现在您的应用程序将正常运行!


0

你的打印语句总是在每次循环中都会打印出来。这就是为什么你应该将该语句放在foreach循环之外的原因:

func loop() {
  for i in 0...<5 {
    print(i)
  }
// it enters here when the loop is finished
  print("loop has finished")
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接