2016-05-23 43 views
5

Bir döngü oluşturmaya çalışıyorum ancak bu hatadan nasıl kurtulacağını anlayamıyorumİkili operatör '.. <', 'Int' ve 'CGFloat' türündeki işlenenlere uygulanamaz

Kodum:

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) 
    } 

hata self.frame.size.width üzerinde for hattı ve Sen Int veya UInt gibi bir tamsayı türüne aralığın sağ tarafını dönüştürmek zorunda (movingGroundTexture.aize().width)

+2

Yarı açık menzil operatörü (.. <) bildiğim kadarıyla tamsayı olmayan değerler ile çalışmaz. – vadian

cevap

10

Sen kayan nokta türleri ile bir CountableRange (veya CountableClosedRange) oluşturamaz.

You ya dönüştürmek istediğiniz senin 2 + self.frame.size.width/movingGroundTexture.size().widthInt bir etmek:

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

Yoksa stride (Swift 2 sözdizimi) kullanmak istiyorum:

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

Swift 3 sözdizimi:

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

Kayan nokta hassaslığına ihtiyacınız olup olmadığına bağlıdır. Üst sınırınızın integral olmayan bir değer olması durumunda,sürümü Int(...)'un kesirli bileşeni göz ardı edeceğinden dolayı, aralık operatör sürümünden bir kez daha yineleyecektir.

5

üzerindedir:

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