2016-09-28 56 views
2

在迅速,我总是用C表示法等:为了在循环中迅速与动态范围

for (var i=0;i<mybuffer.count;i++) {} 

现在,在3.0这不能被使用。 的问题是,使用

for i in..<mybuffer.count {} 

不会检查mybuffer.count的值对于每次迭代,这导致索引超出范围,以防mybuffer.count变化。

有没有办法解决这个问题?

我可以使用一个while语句,但我想必须有一种方法来使用动态范围循环,对吧?

+0

有没有被这样的事情。通常,不鼓励修改循环中数组的大小。这是C中错误的常见来源,因为它会创建棘手的角落案例(在使用NSMutableArray的ObjC中执行此操作是错误的)。在大多数情况下,Swift推动你将'mybuffer'视为不可变的,并创建一个新的数组(使用'map'等工具)。仍然有可能以另一种方式(在某些情况下有充分的理由),但它通过要求“while”语法突出。 –

+1

@RobNapier这与Objective-C中的'NSMutableArray'不是一个错误。这只会是快速枚举的问题,而不是“循环”的“正常”。 – rmaddy

回答

1

一种选择是使用一个while循环:

var i = 0 
while i < mybuffer.count { 
    // do stuff 
    i += 1 
}