Xcode Swift:使用If语句转换数组字符串

时间:2016-11-22 14:55:15

标签: swift xcode

这是一个简单的测验应用程序,带有标签和四个按钮。我希望通过引用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
                }

1 个答案:

答案 0 :(得分:1)

您的问题非常不清楚,看起来您将从重构您的逻辑中受益。 那说如果这是一个简单的测验应用,你有几个按钮tags 01,{{ 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. } } Questionstruct 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