如何在Swift 2.2中编写非C类for循环?

前端之家收集整理的这篇文章主要介绍了如何在Swift 2.2中编写非C类for循环?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我更新了 Xcode(7.3)并且有很多变化;表达式的C-like将被弃用.举个简单的例子,
for var i = 0;  i <= array.count - 1;  i++
 {
      //something with array[i]
 }

如何编写这个清晰简单的C-like for-loop以符合新的变化?

for var i = 0,j = 1;  i <= array.count - 2 && j <= array.count - 1;  i++,j++
{
     //something with array[i] and array[j]
}

更新.
还有一个变种

for var i = 0; i <= <array.count - 1; i++
{
    for var j = i + 1; j <= array.count - 1; j++
    {
        //something with array[i] and array[j]
    }
}

和更多 …

for var i = 0,j = 1,g = 2;  i <= array.count - 3 && j <= array.count - 2 &&   g <= array.count - 1;  i++,j++,g++
{
     //something with array[i] and array[j] and array[g]
}

Update2经过几次建议,while循环是优选的,所有情况的通用替换比C-like for-loop的简单示例更复杂(适用于in表达式).不需要每次都寻找新的方法.
例如:而不是

for var i = 0; i <= <array.count - 1; i++
{
    for var j = i + 1; j <= array.count - 1; j++
    {
        //something with array[i] and array[j]
    }
}

我可以用

var i = 0
while i < array.count
{
    var j = i + 1
    while j < array.count
    {
        //something with array[i] and array[j]
        j += 1
    }
    i += 1
}
最坏的情况是,您可以将其转换为while循环.
var i = 0
var j = 1
while i <= array.count -2 && j <= array.count - 1 {
    // something
    i += 1
    j += 1
}

– 编辑 –

因为你说过,“while循环是所有情况的优选通用替换比C-like for-loop的简单例子更复杂”……我觉得有必要扩展我的答案.我不想对一堆坏代码负责……

在大多数情况下,有一个简单的for-in循环可以处理这种情况:

for item in array {
        // do something with item
    }

    for (item1,item2) in zip(array,array[1 ..< array.count]) {
        // do something with item1 and item2
    }

    for (index,item1) in array.enumerate() {
        for item2 in array[index + 1 ..< array.count] {
            // do soemthing with item1 and item2
        }
    }

对于你的最后一种情况,你可能有理由使用for look,但这是一个非常罕见的边缘情况.

不要使用for循环丢弃代码.

猜你在找的Swift相关文章