我对swift和Xcode还是比较陌生,我正在开发一个测验应用程序,它将对每个问题有三个答案(一个正确,两个不正确)。到目前为止,我已经设法将答案链接到三个按钮,在这些按钮上,当按下正确的按钮时,它将在我的代码中注册为正确的答案。但是,对于每个问题,按钮一总是正确的答案,按钮二总是错误的答案一,按钮三总是错误的答案二,那么有没有办法改变这个问题,所以对每个问题都是随机的?谢谢
由于我是新手,所以我不知道如何将按钮标题随机化,所以还没有尝试过
//更新按钮标题的代码
questionLabel.text = allQuestions.questions[questionNumber].question
buttonOne.setTitle(allQuestions.questions[questionNumber].answer, for: .normal)
buttonTwo.setTitle(allQuestions.questions[questionNumber].falseAnswerOne, for: .normal)
buttonThree.setTitle(allQuestions.questions[questionNumber].falseAnswerTwo, for: .normal)
//保存每个问题和答案信息的代码
class QuestionBank {
var questions = [Question]()
init() {
questions.append(Question(text: "Question", correctAnswer: "X", wrongAnswerOne: "Y", wrongAnswerTwo: "Z"))
}
答案 0 :(得分:0)
我建议将您的Question
模型更改为以下形式:
struct Question {
let text: String
var answers: [Answer]
}
enum Answer {
case correct(String)
case wring(String)
}
let question = Question(text: "Question", answers: [.correct("X"), .wrong("Y"), .wrong("Z")]
要处理正确和错误的答案,您需要告诉按钮它连接的答案类型。因此,您不仅需要在按钮(标题)中保存答案文本,还需要保存答案类型。
要实现此目的,您可以使用变量UIButton
创建自定义的answer: Answer
子类。
class AnswerButton: UIButton {
var answer: Answer! {
didSet {
configureTitle()
}
}
private func configureTitle() {
switch answer {
case .correct(let title):
setTitle(title, for: .normal)
case .wrong(let title):
setTitle(title, for: .normal)
}
}
}
因此,在为按钮分配答案之前,您需要洗净答案并按索引分配它们。
var question = allQuestions.questions[questionNumber]
question.answers.shuffle()
questionLabel.text = question.text
buttonOne.answer = question.answers[0]
buttonTwo.answer = question.answers[1]
buttonThree.answer = question.answers[2]
我认为您在Storyboard中有一些按钮,因此您的按钮IBAction
将是:
@IBAction private func guess(_ sender: AnswerButton) {
switch sender.answer {
case .correct:
// Handle correct answer
case .wrong:
// Handle wrong answer
}
}