2016-05-23 16 views
5

Sto cercando di creare un ciclo for, ma non riesco a capire come sbarazzarsi di questo erroreOperatore binario '.. <' non può essere applicato a operandi di tipo 'int' e 'CGFloat'

il mio codice:

for i:CGFloat in 0 ..< 2 + self.frame.size.width/(movingGroundTexture.size().width) { 
     let sprite = SKSpriteNode(texture: movingGroundTexture) 
     sprite.zPosition = 0 
     sprite.anchorPoint = CGPointMake(0, 0) 
     sprite.position = CGPointMake(i * sprite.size.width, 0) 
     addChild(sprite) 
    } 

l'errore è on line sul forself.frame.size.width e (movingGroundTexture.aize().width)

+2

Per quanto ne so, l'operatore di intervallo semiaperto (.. <) non funziona affatto con valori non interi. – vadian

risposta

10

Non è possibile creare un CountableRange (o CountableClosedRange) con i tipi in virgola mobile.

Si sia desidera convertire il vostro 2 + self.frame.size.width/movingGroundTexture.size().width a un Int:

for i in 0 ..< Int(2 + self.frame.size.width/movingGroundTexture.size().width) { 
    // i is an Int  
} 

O se si vuole utilizzare stride (Swift 2 sintassi):

for i in CGFloat(0).stride(to: 2 + self.frame.size.width/movingGroundTexture.size().width, by: 1) { 
    // i is a CGFloat 
} 

Swift 3 sintassi:

for i in stride(from: 0, to: 2 + self.frame.size.width/movingGroundTexture.size().width, by: 1) { 
    // i is a CGFloat 
} 

Dipende dal fatto che sia necessaria o meno la precisione in virgola mobile. Si noti che se il limite superiore è un valore non integrale, la versione stride verrà iterata ancora una volta rispetto alla versione dell'operatore di intervallo, poiché il Int(...) ignorerà il componente frazionario.

5

è necessario convertire il lato destro del campo per un tipo integer, come Int o UInt:

for i in 0 ..< Int(2 + self.frame.size.width/(movingGroundTexture.size().width)) { 
    ... 
}