2014-06-09 19 views
5

Mam problemy z tą funkcją drawRandomCard.Swift losowy numer

Działa to tak, jak powinno przez jakiś czas, ale w końcu powoduje awarię aplikacji.

Oto kod:

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

Jak swoją awarię kodu? Czy istnieje ślad stosu lub komunikat o błędzie? Twój kod opublikowany na Githubie wydaje się mieć wiele błędów kompilacji. –

+0

To jest duplikat. – Sulthan

Odpowiedz

28

użytkowania arc4random_uniform uniknąć modulo stronniczości. Jak następuje:

let randomNumber = arc4random_uniform(150) 

Dla Twojej przykładzie będzie to:

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

W rzeczywistości poprawny, ale całkowicie niezwiązany z pytaniem. – Kevin

+3

@Kevin Nie jest dobrze wyjaśnione, ale jest związane z pytaniem. Odpowiedź Adama nie przepełni Swift 'Int' – pjs

-4

Spróbuj tego: Int(rand()) zamiast arc4random()

+1

Jak to złagodziłoby awarię? Nie mówię, że nie, ale bez wyjaśnienia nie widzę różnicy. –

+0

dzięki za sugestię, działało naprawdę dobrze. – vyudi

+0

arc4random() nie działa dobrze z typem Int – vyudi