Я пытаюсь создать случайные цвета фона для отображения пользователю, когда они нажимают кнопку на экране. У меня есть неизменный массив элементов UIColor, и я создал изменчивую копию для управления. Когда генерируется случайный цвет, этот цвет затем возвращается и удаляется из изменяемой копии массива, чтобы предотвратить последовательные показы одного цвета, пока не будут показаны все цвета. Предполагается, что это произойдет до тех пор, пока счетчик массива не будет равен 0, а затем он воссоздает массив для повторения процесса. Однако, когда я добираюсь до массива, имеющего от 2 до 0 элементов, цикл, кажется, превращается в бесконечный цикл. Какую логику мне не хватает в моем коде (файл детской площадки)?Проблемы со случайными номерами в Swift
var currentColorIndexNumber = 0
var newColorIndexNumber = 0
let colorsArray = [
UIColor(red: 90/255.0, green: 187/255.0, blue: 181/255.0, alpha: 1.0), //teal color
UIColor(red: 222/255.0, green: 171/255.0, blue: 66/255.0, alpha: 1.0), //yellow color
UIColor(red: 223/255.0, green: 86/255.0, blue: 94/255.0, alpha: 1.0), //red color
UIColor(red: 239/255.0, green: 130/255.0, blue: 100/255.0, alpha: 1.0), //orange color
UIColor(red: 77/255.0, green: 75/255.0, blue: 82/255.0, alpha: 1.0), //dark color
UIColor(red: 105/255.0, green: 94/255.0, blue: 133/255.0, alpha: 1.0), //purple color
UIColor(red: 85/255.0, green: 176/255.0, blue: 112/255.0, alpha: 1.0), //green color
]
var mutableColorsArray: [AnyObject] = colorsArray
func randomNumber() -> Int {
// avoid repeating random integers
while currentColorIndexNumber == newColorIndexNumber {
var unsignedArrayCount = UInt32(mutableColorsArray.count)
var unsignedRandomNumber = arc4random_uniform(unsignedArrayCount)
newColorIndexNumber = Int(unsignedRandomNumber)
}
currentColorIndexNumber = newColorIndexNumber
return newColorIndexNumber
}
func randomColor() -> UIColor {
var randomIndex = randomNumber()
var randomColor = mutableColorsArray[randomIndex] as UIColor
mutableColorsArray.removeAtIndex(randomIndex)
if mutableColorsArray.count == 0 {
mutableColorsArray = colorsArray
}
return randomColor
}
Это не будет перечислять все цвета без повторения, которые я читал как намерение bnkohrn. – pjs
Правда, я пропустил это требование. – Mundi