Xcode Swift:使用If语句转换阵列字符串

Xcode Swift:使用If语句转换阵列字符串,swift,xcode,Swift,Xcode,这是一个带有标签和四个按钮的简单测验应用程序。我希望操作按钮中的代码通过引用if语句中的问题来执行。(参考答案标签的问题是,只有四个按钮,但有四个以上的问题。)下面的代码给出了一个错误,您不能使用二进制运算符。我怎样才能做到这一点 struct Question { var Question : String! var Answers : [String]! var Answer : Int! } var Questio

这是一个带有标签和四个按钮的简单测验应用程序。我希望操作按钮中的代码通过引用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
                }
结构问题{ 问:字符串! var回答:[字符串]! 回答:Int! } 变量问题=[问题]() var QNumber=Int() var AnswerNumber=Int() 问题=[问题(问题:“一”,答案:[“”,“”,“”,“”,“”],答案:0), 问题(问题:"二",答案:[",",",","一",, 问题(问题:"三",答案:[",",",","二",, 问题(问题:"四",答案:[",",",","三"),, 问题(问题:“五”,答案:[,,,,,,,],答案:0),] func PickQuestion(){ 如果0.count>0{ QNumber=0 QLabel.text=问题[QNumber]。问题 AnswerNumber=问题[QNumber]。回答
对于0中的i.你的问题非常不清楚,看起来你会从重新构建你的逻辑中受益。也就是说,如果这是一个简单的测验应用程序,并且你有几个带有
标签的按钮,
0
1
2
3
,那么你应该能够简单地比较问题的
>使用按钮
标记回答
属性,避免将任何字符串完全比较

您的问题也不清楚“当前问题”是如何选择的,因此您可能也希望确定该问题,我建议将对象存储在
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.
    }
}
上面的代码未经测试,我希望它不会让您进一步困惑,但是,在当前的格式中,您的问题可能会被关闭,因为它不完全清楚您在问什么


编辑:

感谢您更新您的问题,现在您似乎正在尝试将
问题
结构
字符串
“五”
进行比较。这两个对象不可比较

要使代码正常工作,您应该使用已生成的
AnswerNumber
变量,并检查数字是否匹配

@IBAction func Btn4(_ sender: Any) {
    if AnswerNumber == 4 {
        print("Correct Answer")
        //CODE THAT NEEDS TO EXECUTVE
    } else {
        print("Wrong Answer")
        //EXECUTE DIFFERENT CODE
    }
}
假设每个按钮都有一个
iAction
,则需要对每个按钮重复此操作,因此
Btn5
看起来像这样

@IBAction func Btn5(_ sender: Any) {
    if AnswerNumber == 5 {

    ...

编辑:

在闲聊之后,我们发现每个问题都需要一个自定义操作(如果选择了正确的答案)。这是一个mp3文件的形式,根据问题的不同播放

我们得出的结论是,按照现有的结构,您应该添加另一个变量来保存问题
struct
中的mp3,但对于当前问题也是如此,如下所示

struct Question { 
    var Question : String! 
    var Answers : [String]! 
    var Answer : Int! 
    var audioFile: String! 
}

var AnswerMP3 = ""
然后,当我们将当前问题与回答编号一起设置时,我们可以将mp3设置为这样

AnswerMP3 = Questions[QNumber].audioFile
这样,您就不需要对每个问题都进行硬编码操作。按钮只需将正确的mp3传递给另一种播放音频文件的方法

if AnswerNumer == 4 { 
    playMP3File(AnswerMP3) 
} 

func playMP3File(fileName:String) { 
// user the fileName to play the audio file. 
}

myString
从何而来?查看更多的代码和得到的确切错误会很有帮助。您的数组是什么?什么是“调用特定字符串”意思是?到底应该比较什么?我更新了帖子,试图让目标更明确。我希望这会有所帮助。谢谢。@Phillip我已经更新了我的答案,为你的代码添加了一个补丁。谢谢@Wez,但我实际上有10个问题,只有4个按钮……在第四个问题之后我该怎么办?我已经有了答案编号,而不是1-4。我可以对于同一个按钮,不要使用它两次。对我来说,这听起来不是个问题。每个问题只有4个答案,每个问题都会重复使用这些按钮,因此,除非某些问题的答案比其他问题多,否则你有多少个问题并不重要。好吧,让我们假设问题1和问题2都将答案作为第一个选项。因此,在按钮中1“如果应答号==0{”将出现两次。这意味着它将运行两个if语句的代码,因为if语句完全相同。它将运行两个代码。这不好。我需要运行其中一个代码。不是两个。如果使用您的方法,您只能调用四个不同的代码。我需要调用10个不同的代码。每个问题一个。