You cannot create a CountableRange (or CountableClosedRange ) with floating point types.
You either want to convert 2 + self.frame.size.width / movingGroundTexture.size().width to Int :
for i in 0 ..< Int(2 + self.frame.size.width / movingGroundTexture.size().width) { // i is an Int }
Or do you want to use stride (Swift 2 syntax):
for i in CGFloat(0).stride(to: 2 + self.frame.size.width / movingGroundTexture.size().width, by: 1) { // i is a CGFloat }
Swift 3 Syntax:
for i in stride(from: 0, to: 2 + self.frame.size.width / movingGroundTexture.size().width, by: 1) { // i is a CGFloat }
Depends on whether you need floating point precision or not. Note that if your upper bound is a non-integer value, the stride version will iterate again than the range operator version, because Int(...) will ignore the fractional component.
source share