2016-05-23 20 views
5

forループを作成しようとしていますが、このエラーを取り除く方法を理解できません。'Int'と 'CGFloat'型のオペランドに2進演算子 '.. <'を適用できません

マイコード:

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

エラーはあなたがIntまたはUIntのように、整数型の範囲の右側を変換する必要がありself.frame.size.width(movingGroundTexture.aize().width)

+2

私が知っている限り、半整数範囲の演算子(.. <)は整数でない値では全く機能しません。 – vadian

答えて

10

あなたは浮動小数点型でCountableRange(またはCountableClosedRange)を作成することはできません。

あなたはどちらかは、あなたの2 + self.frame.size.width/movingGroundTexture.size().widthIntに変換したい:

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

それとも、stride(スウィフト2の構文)を使用したい:

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

スウィフト3構文:

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

浮動小数点精度が必要かどうかによって異なります。上限が非整数値の場合、Int(...)が小数成分を無視するため、strideバージョンはレンジ演算子のバージョンよりもう1回繰り返します。

5

forラインである:

for i in 0 ..< Int(2 + self.frame.size.width/(movingGroundTexture.size().width)) { 
    ... 
} 
関連する問題