使用用户输入的SWIFT提取并比较JSON文件中的信息

问题描述 投票:0回答:1

我正在制作测验应用程序。我正在尝试访问JSON文件,并查看用户输入的内容是否与JSON中的内容相同,如果是,则应用程序应更新图像视图以显示新问题。全部在一个控制器中完成。

我的文件称为Answers.json:

[
  {
    "Question Number": {
      "13": {
        "Answer": [
          "7/16"
        ]
      },
      "14": {
         "Answer": [
           "25π",
           "(25)(π)",
           "π25",
           "25(π)",
           "(25)π",
           "25(π)"
         ]
       },
       "15": {
         "Answer": [
           "6"
         ]
       }
    }
  }
]

这是我目前拥有的:

let enteredLevel = 14
guard let path = Bundle.main.path(forResource: "answers", ofType: "json") else { return }
    let url = URL(fileURLWithPath: path)

    do {
        let data = try Data(contentsOf: url)
        let json = try JSONSerialization.jsonObject(with: data, options: .mutableContainers)
        //print(json)

        guard let array = json as? [Any] else { return }
        let i = enteredLevel
        for user in array {
            guard let userDict = user as? [String: Any] else { return }
            guard let questions = userDict["Question Number"] as? [String: Any] else { return }
            guard let questionNum = questions["\(i)"] as? [String:Any] else {return}
            guard let qAnswer = questionNum["Answer"] else { return }
            print(qAnswer)

我的问题是,首先,我已在viewDidLoad中编写了以上代码,但稍后无法在代码中调用qAnswer变量。另外,如果我从qAnswer行中删除防护,则可以调用qAnswer,但是在尝试将用户输入与qAnswer变量中的内容进行比较时会出错,因为qAnswer的文件类型为Any ],并且用户输入的文件类型为String

请帮助。谢谢

arrays json swift guard
1个回答
0
投票

1--因为您要在qAnswer的范围内声明变量viewDidLoad,所以在其余的代码中将无法使用它。例如,您可以为您的类声明一个实例变量,该实例变量包含一个答案列表,并且在整个类中都可以使用。

2-我不确定第二个问题,因为删除guard不会使您所说的成为现实。这是为什么:

guard let questionNum = questions["\(i)"] as? [String:Any]语句基本上说questionNum应该是具有String类型的键和Any类型的值的字典。

然后,您用键Answer查找值。由于您不知道该值是否存在,因此Swift将返回一个可选(即可为空)值,因此返回的值是Any?类型,您可以使用防护将其更改为Any

我的建议是使此代码正常运行,如下所示更改代码:

guard let questionNum = questions["\(i)"] as? [String : Any] else { return }
// Change to:
guard let questionNum = questions["\(i)"] as? [String : String] else {return}
© www.soinside.com 2019 - 2024. All rights reserved.