Ваш код не работает, потому что вы делаете эту серию вещей, когда ответ правильный:
players?[currentplayerIndex].score += 1
loadnextQuestion()
updateUi()
Счет игрока действительно увеличен. Но обратите внимание, что следующая вещь, которую вы делаете, это loadnextQuestion()
, которая увеличивает currentplayerIndex
. Это приводит к тому, что updateUi
обновляет текст метки до значения следующего игрока, а не игрока, который только что правильно ответил на вопрос.
Один из способов исправить это - поменять местами последние две строки:
players?[currentplayerIndex].score += 1
updateUi()
loadnextQuestion()
Обратите внимание, что это тот же порядок, что и в ветке else
, которую вы написали правильно.
Это заставляет метку всегда отображать счет последний игрок, что может быть нежелательно. Предполагая, что там не 100 игроков или что-то сумасшедшее, я думаю, что будет гораздо лучше UX, если вы отобразите все результаты игрока:
func updateUi() {
if let scores = players?.map({ "\($0.score)" }) {
playerPoints.text = "Points: \(scores.joined(separator: ", "))"
}
}