这是一个简单的测验应用程序,带有标签和四个按钮。我希望通过引用if语句中的问题来执行操作按钮中的代码。 (引用答案标签的问题是只有四个按钮,但有四个以上的问题。)下面的代码给出了一个错误,你不能使用二元运算符。我怎样才能做到这一点?
struct Question {
var Question : String!
var Answers : [String]!
var Answer : Int!
}
var Questions = [Question]()
var QNumber = Int()
var AnswerNumber = Int()
Questions = [Question(Question: "One", Answers: ["", "", "", ""], Answer: 0),
Question(Question: "Two", Answers: ["", "", "", ""], Answer: 1),
Question(Question: "Three", Answers: ["", "", "", ""], Answer: 2),
Question(Question: "Four", Answers: ["", "", "", ""], Answer: 3),
Question(Question: "Five", Answers: ["", "", "", ""], Answer: 0),]
func PickQuestion(){
if Questions.count > 0{
QNumber = 0
QLabel.text = Questions[QNumber].Question
AnswerNumber = Questions[QNumber].Answer
for i in 0..<Buttons.count{
Buttons[i].setTitle(Questions[QNumber].Answers[i], for: UIControlState.normal)
}
Questions.remove(at: QNumber)
}
@IBAction func Btn4(_ sender: Any) {
if(Question == "Five") {
//CODE THAT NEEDS TO EXECUTVE
} else if(Question == "Four") {
//EXECUTE A DIFFERENT CODE
}
答案 0 :(得分:1)
您的问题非常不清楚,看起来您将从重构您的逻辑中受益。 那说,如果这是一个简单的测验应用,你有几个按钮tags
0
,1
,{{ 1}}和2
那么您应该只需将问题3
属性与按钮Answer
进行比较,并避免完全比较任何字符串。
从您的问题中还不清楚当前问题&#34;当前问题&#34;被选中,所以你也可能想要确定那个,我建议将对象存放在tag
的某个地方,这样你就可以做如下的事情......
var
上述代码未经测试,我希望它不会让您进一步混淆,但是,在目前的格式中,您的问题可能会被关闭,因为您的问题并不完全清楚。
修改强>
感谢您更新自己的问题,现在看来您正试图将var currentQuestion:Question!
// Get the first question or something.
currentQuestion = Questions.first
@IBAction func buttonTapped(sender: UIButton) {
if sender.tag == currentQuestion.Answer {
print("You are a winner")
// Time to get a new question son.
}
}
Question
与struct
String
进行比较。这两个对象无法比较。
要使代码正常工作,您应该使用您所做的"Five"
变量,并检查数字是否匹配。
AnswerNumber
假设每个按钮都有一个@IBAction func Btn4(_ sender: Any) {
if AnswerNumber == 4 {
print("Correct Answer")
//CODE THAT NEEDS TO EXECUTVE
} else {
print("Wrong Answer")
//EXECUTE DIFFERENT CODE
}
}
,您需要为每个按钮重复此操作,因此IBAction
看起来像这样。
Btn5
修改强>
聊天之后,我们发现每个问题都需要自定义操作(如果选择了正确的答案)。这采取了一个mp3文件的形式,根据它的问题播放。
我们得出的结论是,在现有结构之后,您应该添加另一个变量来保存问题@IBAction func Btn5(_ sender: Any) {
if AnswerNumber == 5 {
...
中的mp3,但也针对当前问题,如下所示。
struct
然后,当我们将当前问题与struct Question {
var Question : String!
var Answers : [String]!
var Answer : Int!
var audioFile: String!
}
var AnswerMP3 = ""
一起设置时,我们可以像这样设置mp3。
AnswerNumber
然后以这种方式,您不需要为每个问题都进行硬编码操作。按钮只是将正确的mp3传递给另一个播放音频文件的方法。
AnswerMP3 = Questions[QNumber].audioFile