Random 快速随机数

Random 快速随机数,random,swift,swift-playground,Random,Swift,Swift Playground,我对这个抽卡功能有问题 在一段时间内,它的工作方式应该是一样的,但最终它会使应用程序崩溃 代码如下: import Foundation var cardDeck = Array<PlayingCard>() class Deck { func addCard(card : PlayingCard , atTop : Bool = false){ if atTop { cardDeck.insert(card, atIndex

我对这个抽卡功能有问题

在一段时间内,它的工作方式应该是一样的,但最终它会使应用程序崩溃

代码如下:

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
    }

}
<代码>导入基础 var cardDeck=Array() 甲板{ func addCard(卡片:PlayingCard,atTop:Bool=false){ 如果阿托普{ 卡片组。插入(卡片,索引:0); }否则{ 卡片组+=卡片组 } } func drawRandomCard()->播放卡{ var卡=播放卡() var randomNumber:Int=Int(arc4random())%(cardDeck.count-1) 卡片=卡片组[随机编号] cardDeck.removeAtIndex(随机数) 回程卡 } }
试试这个:
Int(rand())
而不是
arc4random()
使用
arc4random\u uniform
来避免模偏差。例如:

let randomNumber = arc4random_uniform(150)
例如,它将是:

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

你的代码是如何崩溃的?是否存在堆栈跟踪或错误消息?您发布在Github上的代码似乎有许多编译错误。这将如何减轻崩溃?我不是说没有,但是没有解释,我看不出有什么不同。谢谢你的建议,效果非常好。arc4random()不适合Int-type缺少任何解释为什么要使用rand而不是arc4random这个非常糟糕的答案令人惊讶的是,它有两张赞成票!需要说明的是:`rand()`是一个非常糟糕的随机数生成器,需要种子设定,因此不应使用它
arc4random()
arc4random\u uniform()
生成加密良好的随机数,不需要种子。事实上正确,但与问题完全无关。@Kevin没有很好地解释,但与问题有关。亚当的答案不会溢出Swift
Int