With the removal of the traditional C-style for-loop in Swift 3.0, how can I do the following?
for (i = 1; i < max; i+=2) { // Do something }
In Python, the for-in control flow statement has an optional step value:
for i in range(1, max, 2): # Do something
But the Swift range operator appears to have no equivalent:
for i in 1..<max { // Do something }
for Loop with where Clause In Swift, we can also add a where clause with for-in loop. It is used to implement filters in the loop. That is, if the condition in where clause returns true , the loop is executed. In the above example, we have used a for-in loop to access each elements of languages .
Swift has a helpful stride() , which lets you move from one value to another using any increment – and even lets you specify whether the upper bound is exclusive or inclusive.
You can use this function to stride over values of any type that conforms to the Strideable protocol, such as integers or floating-point types. Starting with start , each successive value of the sequence adds stride until the next value would be equal to or beyond end .
The Swift synonym for a "step" is "stride" - the Strideable protocol in fact, implemented by many common numerical types.
The equivalent of (i = 1; i < max; i+=2)
is:
for i in stride(from: 1, to: max, by: 2) { // Do something }
Alternatively, to get the equivalent of i<=max
, use the through
variant:
for i in stride(from: 1, through: max, by: 2) { // Do something }
Note that stride
returns a StrideTo
/StrideThrough
, which conforms to Sequence
, so anything you can do with a sequence, you can do with the result of a call to stride
(ie map
, forEach
, filter
, etc). For example:
stride(from: 1, to: max, by: 2).forEach { i in // Do something }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With