在Swift中,如何向函数添加一个额外的参数,以发送与.json文件中的变量对应的字符串

时间:2016-02-15 11:55:32

标签: ios swift

我是编程新手,并且通过许多在线课程学习Swift。在其中一个我们建立了一个琐事游戏应用程序,在我的业余时间,我一直在玩代码来改善它(学习我的最佳方式!)

该应用从.json文件加载所有问题和答案,该文件包含以下格式的数据:

{
    "id" : "1",
    "question": "Earth is a:",
         "answers": [
        "Planet",
        "Meteor",
        "Star",
        "Asteroid"
      ],
      "difficulty": "1"
  }

正确答案始终是列出的第一个答案。现在,该应用程序通过以下功能提供问题和答案:

func loadQuestions(index : Int)
    {
        let entry : NSDictionary = allEntries.objectAtIndex(index) as! NSDictionary
        let question : NSString = entry.objectForKey("question") as! NSString
        let arr : NSMutableArray = entry.objectForKey("answers") as! NSMutableArray

        //println(question)
        //println(arr)

        labelQuestion.text = question as String

        let indices : [Int] = [0,1,2,3]
        //let newSequence = shuffle(indices)
        let newSequence = indices.shuffle()
        var i : Int = 0
        for(i = 0; i < newSequence.count; i++)
        {
            let index = newSequence[i]
            if(index == 0)
            {
                // we need to store the correct answer index
                currentCorrectAnswerIndex =  i

            }

            let answer = arr.objectAtIndex(index) as! NSString
            switch(i)
            {
            case 0:
                buttonA.setTitle(answer as String, forState: UIControlState.Normal)
                break;

            case 1:
                buttonB.setTitle(answer as String, forState: UIControlState.Normal)
                break;

            case 2:
                buttonC.setTitle(answer as String, forState: UIControlState.Normal)
                break;

            case 3:
                buttonD.setTitle(answer as String, forState: UIControlState.Normal)
                break;

            default:
                break;
            }
}

我想要做的是添加一个额外的参数,将对应于答案索引的字符串发送到名为answertext的变量,以便我可以将此变量用作标签中的字符串(例如,显示正确答案)。现在,如果我正确理解上面的代码,我想要做的是基本上将NSString作为String发送。

我研究了这几天,我很确定我想做的事情是可能的。我看过使用switchif else,但没有成功。

我的问题是:我该怎么做?

任何代码示例或推荐进一步阅读都将非常感激。或者,如果您提供实际代码,我会非常感谢它的工作原理。我正在使用最新的Xcode和Swift。

或者,如果我不想做什么,请告诉我。

1 个答案:

答案 0 :(得分:0)

对我来说似乎是一个非常简单的要求。如果你想在变量中存储正确的答案,只需在类的顶部定义变量,就像这样..

var answertext:String?

然后在你的loadQuestions方法存储区中正确的答案之前你将数组洗牌 - 在得到这样的答案数组之后,最好直接做到这一点。

let arr : NSMutableArray = entry.objectForKey("answers") as! NSMutableArray
if let a = arr.objectAtIndex(0) as? String {
    self.answertext = a
}

因为我们使用answertext?变量定义为可选项 - 您需要在以后访问它时解压缩它。

if let a = self.answertext {
    self.label.text = "the answer was \(a)"
}

如果您正在寻找,请告诉我。