У меня есть UISegmentedControl с 4 индексами, содержащими ответы на викторину, которые собраны из массива строк. Моя цель - заполнить все 4 индекса неправильными ответами, а затем случайным образом заменить один из этих индексов правильным ответом. Когда я запускаю симулятор, приложение появляется в бесконечном цикле, и представление никогда не загружается. Когда я прокомментирую весь второй цикл for (loop, который должен заполнять индексы с неправильными догадками), загружаются представления и сегментированный элемент управления, только с правильным ответом, отображаемым в одном сегменте. Почему вводится бесконечный цикл (если это так) и как я могу изменить этот код для отображения сегментированных элементов управления по желанию?Как заполнить индексы UISegmentedControl со значениями String Array в Swift
func nextQuestion()
{
questionNumberLabel.text = String(format: "Question %1$d of %2$d",
(correctGuesses + 1), numberOfQuestions)
answerLabel.text = ""
correctAnswer = allAnimals.removeAtIndex(0)
animalImageView.image = UIImage(named: correctAnswer) // next animal
// re-enable UISegmentedControls and delete prior segments
for segmentedControl in segmentedControls
{
segmentedControl.enabled = true
segmentedControl.removeAllSegments()
}
// place guesses on displayed UISegmentedControls
allAnimals.shuffle() // shuffle array
var i = 0
for segmentedControl in segmentedControls
{
if !segmentedControl.hidden
{
var segmentIndex = 0
while segmentIndex < 4
{
if i < allAnimals.count && correctAnswer != allAnimals[i]
{
segmentedControl.insertSegmentWithTitle(
getStringFromFile(allAnimals[i]),
atIndex: segmentIndex, animated: false)
++segmentIndex
}
++i
}
}
}
// pick random segment and replace with correct answer
let randomIndexInRow = Int(arc4random_uniform(UInt32(4)))
segmentedControls[0].removeSegmentAtIndex(
randomIndexInRow, animated: false)
segmentedControls[0].insertSegmentWithTitle(
getStringFromFile(correctAnswer),
atIndex: randomIndexInRow, animated: false)
}