2015-11-07 29 views
0

我的某個功能有問題:我的應用程序在iPhone 5s,6等上完美運行,但是在iPhone 5上,我的代碼有問題。當我的函數被調用時,我總是有這樣的問題:使用arc4random功能在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

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))) 
+0

'Int32(bitPattern:)'轉換並不是真的需要。 –

+0

謝謝你,我的申請現在完美無缺;) –

+0

@MartinR,是的。鑑於幀寬度很小,它不會溢出'Int'。在說一個'UInt32'和'Int'可能會崩潰後,我只是感到格外小心。 – vacawama