Search code examples
swiftxcode7.3swift3

For-In Loops multiple conditions


With the new update to Xcode 7.3, a lot of issues appeared related with the new version of Swift 3. One of them says "C-style for statement is deprecated and will be removed in a future version of Swift" (this appears in traditional for statements).

One of this loops has more than one condition:

for i = 0; i < 5 && i < products.count; i += 1 {

}

My question is, is there any elegant way (not use break) to include this double condition in a for-in loop of Swift:

for i in 0 ..< 5 {

}

Solution

  • It would be just as you're saying if you described it out loud:

    for i in 0 ..< min(5, products.count) { ... }
    

    That said, I suspect you really mean:

    for product in products.prefix(5) { ... }
    

    which is less error-prone than anything that requires subscripting.

    It's possible you actually need an integer index (though this is rare), in which case you mean:

    for (index, product) in products.enumerate().prefix(5) { ... }
    

    Or you could even get a real index if you wanted with:

    for (index, product) in zip(products.indices, products).prefix(5) { ... }