web-dev-qa-db-ja.com

Swift乱数

このdrawRandomCard関数に問題があります。

しばらくの間は正常に動作しますが、最終的にはアプリケーションがクラッシュします。

コードは次のとおりです。

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
    }

}
7
vyudi

使用する arc4random_uniformモジュロバイアスを回避します。次のように:

let randomNumber = arc4random_uniform(150)

あなたの例では、次のようになります。

let randomNumber = Int(arc4random_uniform(UInt32(cardDeck.count)))
38
Adam