swift: как удалить случайным образом от 1 до 3 элементов?

Мой код случайным образом удаляет только одну монету. Как я могу удалить случайным образом от 1 до 3 монет?

@IBAction func endTurn(sender: UIButton!) {
    if coins.count > 0 { // @IBOutlet var coins: [UIButton]! (21 coins)
        let index: Int = Int(arc4random_uniform(UInt32(coins.count)))
        coins[index].hidden = true
        self.coins.removeAtIndex(index)
        if coins.isEmpty {
            println("GameOver")
        }
    }
}

person Spartak    schedule 05.08.2015    source источник
comment
Делать случайное число от 1 до 3 и цикл for, вызывающий ваш код?   -  person Larme    schedule 05.08.2015
comment
Уже ответили здесь stackoverflow.com/ вопросов/5601953/ Примечание: используйте arc4random вместо rand   -  person Prabhu.Somasundaram    schedule 05.08.2015


Ответы (2)


Попробуй это

let numberToDelete = Int(arc4random_uniform(UInt32(3))) + 1

for i in 0..<numberToDelete{
    let indexToDelete = Int(arc4random_uniform(UInt32(coins.count)))
    coins.removeAtIndex(indexToDelete)
    if coins.isEmpty{
        break;
    }
}
if coins.isEmpty{
    println("GameOver")
}
person nRewik    schedule 05.08.2015

Для случайных я рекомендую это extension:

extension Int {
    static func random(range: Range<Int> ) -> Int {
        var offset = 0

        if range.startIndex < 0 {
            offset = abs(range.startIndex)
        }

        let min = UInt32(range.startIndex + offset)
        let max = UInt32(range.endIndex   + offset)

        return Int(min + arc4random_uniform(max - min)) - offset
    }
}

А потом:

var i = Int.random(1...5)
person Gun13    schedule 05.08.2015
comment
Это очень приятно, поздравляю. Но я думаю, что это должно быть if range.startIndex < 0 { - person Luca Angeletti; 05.08.2015