函数不能在带有arc4random的iPhone 5上运行

时间:2015-11-07 16:13:46

标签: swift

我的一个功能有问题:我的应用程序在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)有问题,但我不知道哪一个。

1 个答案:

答案 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)))