我的一个功能有问题:我的应用程序在iPhone 5s,6等上完美运行,但在iPhone 5上我的代码有问题。当我的函数被调用时,我总是遇到这个问题:
switch choixDeCote {
case 1 : //Haut
let MinValue = self.size.width / 8
let MaxValue = self.size.width - 200
SpawnX = UInt32(MaxValue - MinValue)
SpawnX = arc4random_uniform(SpawnX)
SpawnY = UInt32(self.size.height)
directionX = Int(arc4random()) % Int(self.frame.size.width)
print(directionX)
directionY = 0
action = SKAction.moveTo(CGPoint(x: CGFloat(directionX),y: CGFloat(directionY)),duration: 4)
break
并且Xcode说directionX = Int(arc4random()) % Int(self.frame.size.width)
有问题,但我不知道哪一个。
答案 0 :(得分:1)
arc4random()
返回UInt32
。在像iPhone 5这样的32位机器上,这可能会溢出Int
。
我建议改为:
directionX = Int(Int32(bitPattern: arc4random_uniform(UInt32(self.frame.size.width))))
Int32(bitPattern:)
只是一种预防措施,并不是必需的,因为self.frame.size.width
比MAXINT32小得多,因此生成的随机数不会溢出Int
。你可以这样做:
directionX = Int(arc4random_uniform(UInt32(self.frame.size.width)))