Several Swift-style increments for loops

I have the following loop in my Swift code:

for var i:Int = 0, j:Int = 0; i < rawDataOut.count; i += 4, ++j {
    maskPixels[j] = rawDataOut[i + 3]
}

I get two warnings in Xcode:

  • C-style for approval is outdated and will be removed in a future version of Swift
  • '++' is deprecated: it will be removed in Swift 3

I can’t figure out how to rewrite this in Swift For In Loops to allow for two variables and a 4-step without it becoming dirty. Is there a simple elegant translation?

+4
source share
2 answers

Prerequisites for answering this question: view your example

, i i < rawDataOut.count-3, i < rawDataOut.count, rawDataOut[i + 3] w.r.t. . , rawDataOut, , .

, ( )

/* example data */
var rawDataOut = Array(1...40)
var maskPixels = [Int](count: 10, repeatedValue: 0)

/* your pre-Swift 2.2/3.0 loop */
for var i: Int = 0, j: Int = 0; i < rawDataOut.count-3; i += 4, ++j {
    maskPixels[j] = rawDataOut[i + 3]
}

print(maskPixels) //[4, 8, 12, 16, 20, 24, 28, 32, 36, 40]

for in ... where

(j=4*i), , j, .

/* example data */
var rawDataOut = Array(1...40)
var maskPixels = [Int](count: 10, repeatedValue: 0)

/* your pre-Swift 2.2/3.0 loop */
for i in 0..<(rawDataOut.count-3) where i%4 == 0 {
    maskPixels[i/4] = rawDataOut[i + 3]
}

print(maskPixels) // [4, 8, 12, 16, 20, 24, 28, 32, 36, 40]

, , . 2- , stride enumerate.


stride enumerate

stride, i , (j ). enumerate j, ..

/* example data */
var rawDataOut = Array(1...40)
var maskPixels = [Int](count: 10, repeatedValue: 0)

/* Swift >= 2.2 loop */
for (j, i) in 0.stride(to: rawDataOut.count-3, by: 4).enumerate() {
    maskPixels[j] = rawDataOut[i + 3]
}

print(maskPixels) // [4, 8, 12, 16, 20, 24, 28, 32, 36, 40]

, Swift 3 ( 2.2) , stride(to:by:) stride(through:by:) Strideable ( , ) ( Swift 1.2) stride(from:to:by:) stride(from:through:by:), ., , swift/stdlib/public/core/Stride.swift


: while

, , pre-Swift 2.2

for var i: Int = 0, j: Int = 0; i < rawDataOut.count-3; i += 4, j += i { ... }

, , while , , ; , , .

var i = 0, j = 0
while i < rawDataOut.count-3 {

    // ...

    // increase iterates
    i += 4
    j += i
}

, C- , for in, stride .., , , 'while, , .

+13

Swift 4

for index in stride(from: 0, to: 10, by: 2){
    print(index)
}
+1

All Articles