如何将此 for 循环更改为 while 循环?
let op = ["+", "-", "*", "/"]
for x in op {
if display.text!.rangeOfString(x) != nil {
y = x
break
}
}
您可以使用这样的东西来创建 while 循环,该循环允许您对数组中的每个项目执行操作,前提是它是 4 个元素。
let op = ["+", "-", "*", "/"]
var count: Int = 0
while (count < 4)
{
print(op[count])
//perform any action with op[count] in here.
count += 1
}
如果您真的必须使用 while
循环,这将是最接近更正的方法:
let op = ["+", "-", "*", "/"]
var opSequence = op.generate()
while let nextOp = opSequence.next() {
print(nextOp)
// do something with nextOp
}
然而,重要的是要理解,这对于for
- in
循环来说并没有太大的不同,作为一个for
- in
循环实际上只是上述代码的语法糖。
for
- in
循环更干净,更接近人们期望在这里看到的内容。
我们还可以编写一个 while
循环,为我们提供索引和值,如下所示:
let op = ["+", "-", "*", "/"]
var opSequence = op.enumerate().generate()
while let (index, nextOp) = opSequence.next() {
print("At index (index): (nextOp)")
}
您可以将这组相同的代码应用于任何CollectionType
。 但同样,这与在for
- in
循环的掩护下发生的事情并没有什么不同。 一个for
- in
循环依赖于这个返回IndexingGenerator
generate()
方法,该方法有一个方法next()
。 next()
方法返回集合所包含的任何内容的可选类型,而 for
- in
循环(与此 while
循环非常相似)每次迭代调用next()
,只要它获得非nil
值,它就会使用该值进入循环体。
主要区别在于 for
- in
循环不会给您留下悬空变量(在本例中为 opSequence
变量),以及 for
- in
循环更具可读性。