1

中的新控制转移语句(标签)的最佳实践是Swift 2什么?

自从我听说它后,我就忍不住将它与goto来自旧Basic语言的命令进行比较,当时经验丰富的程序员从未很好地接受它。

控制流传输的一些用途看起来不错,如下例所示:

outer: for i in 1...100{
  for j in 1...100{
    print("\(i), \(j)")
    if j == 10 {
      break outer
    }
  }
}

但是控制流传输使用的限制是什么?

什么时候开始使用它是不好的做法?

如果它的使用是如此糟糕的做法,为什么它又回来了?

4

2 回答 2

3

您可以在循环语句、if 语句或 switch 语句前加上语句标签,后跟冒号 (:),break 和 continue 语句用于更改循环语句或 switch 语句中的控制流。

break 语句中断当前循环执行,而 continue 只是中断当前迭代。

考虑:

     firstLoop :for j in 0...1{
      secondLoop: for i in 0...10{
        if (i % 2) == 0{
          if (i == 4){
             break firstLoop
          }
          print(i)
         }
       }
      }

输出将是: 0,2

如果我们将break firstloop替换为break secondLoop o/p 将是:0,2,0,2

如果我们将break firstloop替换为continue o/p 将是:0,2,6,8,10,0,2,6,8,10

如果我们将break firstloop替换为continue firstloop continue o/p 将再次:0,2,0,2

如果 continue 后面跟着一个语句标签,那么它将停止该语句标签的当前迭代,而不是语句标签指向的循环。

goto VS 语句标签

. goto 是一种无条件分支,您可以在程序中的任何位置进行分支,不鼓励使用 goto 语句,因为它会改变逻辑的顺序流程。

为什么要使用语句 Label以及它的限制是什么?

. where as continue 和 break 可以使用语句标签当且仅当它写在具有相同语句标签的循环内,因此代码将更安全。它使程序员的生活变得轻松,当然您不能使用 continue、break 和 statement Label 直接分支到程序的任何部分,这可以被视为一种限制。

于 2015-06-11T12:24:56.493 回答
2

我想您是在询问如何使用标签来表示 break 和 continue 语句。与 basic 中可怕的 goto 语句相比,这是一种更有限、更安全的用法。它只是让您告诉编译器在嵌套循环结构时需要中断/继续的范围。

据我所知,break 和 continue 是 Swift 中标签的唯一用途,因此它似乎有用且合适。

于 2015-06-11T03:59:16.403 回答