Ошибка индексации вне диапазона при попытке перейти непосредственно к концу массива
Это мой массив в проекте в Xcode.
Var questions = ["q.1", "q.2", "q.3"]
Я добавил две кнопки, то есть кнопку "вперед" и кнопку "назад", для прокрутки вопросов. Теперь, когда я впервые нажимаю кнопку "назад", как только запускаю свой проект на симуляторе, чтобы он сразу перешел к "q.3", он выдает ошибку, говорящую:
"Index out of range."
Имейте в виду, что когда я сначала нажимаю на кнопку "Вперед", она работает нормально и получает "q.2", но при первоначальном нажатии на кнопку "Назад" выдает ошибку. Ниже мой код.
@IBOutlet weak var question: UILabel! //this is my question label
questions = ["q.1", "q.2", "q.3"] //this is my array of questions
currentQuestionIndex = 0
@IBAction func backwardBtnTapped(_ sender: Any) {
currentQuestionIndex -= 1
let noOfQuestions = questions.count
let previousQuestionIndex = currentQuestionIndex % noOfQuestions
question.text = questions[previousQuestionIndex]
@IBAction func forwardBtnTapped(_ sender: Any) {
currentQuestionIndex += 1
let noOfQuestions = questions.count
let nextQuestionIndex = currentQuestionIndex % noOfQuestions
question.text = questions[nextQuestionIndex]
3 ответа
Если вы хотите, чтобы кнопки "вперед" и "назад" были отключены, когда вы отвечаете на последний и первый вопрос соответственно. Вы можете сделать следующее:
Предполагая, что выход вашей кнопки с именем forwardButton и backwardButton инициализирует его как:
backwardButton.userInteractionEnabled = NO
И сделайте свой IBAction для кнопок вперед и назад как:
@IBAction func backwardBtnTapped(_ sender: Any) {
currentQuestionIndex -= 1
if currentQuestionIndex == 0 {
backwardButton.userInteractionEnabled = NO
}
forwardButton.userInteractionEnabled = YES
let noOfQuestions = questions.count
let previousQuestionIndex = currentQuestionIndex % noOfQuestions
question.text = questions[previousQuestionIndex]
}
@IBAction func forwardBtnTapped(_ sender: Any) {
currentQuestionIndex += 1
if currentQuestionIndex >= questions.count - 1 {
forwardButton.userInteractionEnabled = NO
}
backwardButton.userInteractionEnabled = YES
let noOfQuestions = questions.count
let nextQuestionIndex = currentQuestionIndex % noOfQuestions
question.text = questions[nextQuestionIndex]
}
Или, если вы хотите, чтобы он вел себя так, как сейчас, просто сделайте это в IBAction для кнопок "вперед" и "назад":
@IBAction func backwardBtnTapped(_ sender: Any) {
currentQuestionIndex -= 1
if currentQuestionIndex < 0 {
currentQuestionIndex = questions.count - 1
}
question.text = questions[currentQuestionIndex]
}
@IBAction func forwardBtnTapped(_ sender: Any) {
currentQuestionIndex += 1
if currentQuestionIndex >= questions.count {
currentQuestionIndex = 0
}
question.text = questions[currentQuestionIndex]
}
Вам нужно проверить состояние.
if currentQuestionIndex > 0{
let noOfQuestions = questions.count
let previousQuestionIndex = currentQuestionIndex % noOfQuestions
question.text = questions[previousQuestionIndex]
}
Попробуйте, как это может быть полезным
@IBAction func backwardBtnTapped(_ sender: Any) {
currentQuestionIndex -= 1
if currentQuestionIndex < 0
{
currentQuestionIndex = questions.count-1
}
question.text = questions[currentQuestionIndex]
}
@IBAction func forwardBtnTapped(_ sender: Any) {
currentQuestionIndex += 1
if currentQuestionIndex >= questions.count
{
currentQuestionIndex = 0
}
question.text = questions[currentQuestionIndex]
}