2014-06-09 4 views
5

Ho problemi con questa funzione drawRandomCard.Numero casuale rapido

Funziona come dovrebbe per un po 'di tempo, ma alla fine si blocca l'applicazione.

Ecco il codice:

import Foundation 


var cardDeck = Array<PlayingCard>() 

class Deck { 

    func addCard(card : PlayingCard , atTop : Bool = false){ 

     if atTop { 
      cardDeck.insert(card, atIndex: 0); 
     }else{ 
      cardDeck += card 
     } 
    } 

    func drawRandomCard() -> PlayingCard{ 
     var card = PlayingCard() 
     var randomNumber : Int = Int(arc4random()) % (cardDeck.count - 1) 
     card = cardDeck[randomNumber] 
     cardDeck.removeAtIndex(randomNumber) 
     return card 
    } 

} 
+0

Come funziona il vostro incidente codice? C'è una traccia dello stack o un messaggio di errore? Il tuo codice pubblicato su Github sembra avere un numero di errori di compilazione. –

+0

Questo è un duplicato. – Sulthan

risposta

28

Usa arc4random_uniform per evitare distorsioni modulo. Come segue:

let randomNumber = arc4random_uniform(150) 

Per esempio, sarà:

let randomNumber = Int(arc4random_uniform(UInt32(cardDeck.count))) 
+0

Correttamente corretto, ma del tutto estraneo alla domanda. – Kevin

+3

@Kevin Non ben spiegato, ma è _is_ correlato alla domanda. La risposta di Adam non traboccherà uno Swift 'Int' – pjs

-4

Prova questa: Int(rand()) invece di arc4random()

+1

Come questo allevierebbe lo schianto? Non sto dicendo che non lo sia, ma senza una spiegazione non vedo la differenza. –

+0

grazie per il suggerimento, ha funzionato davvero bene. – vyudi

+0

arc4random() non funziona bene con il tipo Int – vyudi