【问题标题】:How to save my struct as a JSON file in Swift [closed]如何在 Swift 中将我的结构保存为 JSON 文件 [关闭]
【发布时间】:2020-10-01 14:44:04
【问题描述】:

这是我想在报告中使用其变量的结构。

 struct report : Codable {
    var question : String
    var AnswersChosen : [String] = [String]()
    var userCount : Int
    var hintCount : Int

我对用户输入的报告,里面的变量是用户当前的问题,他们选择的选项以及每个问题选择错误答案的次数

var currentReport = [report]()
currentReport.append(report(question:questions[currentQuestion - 1 ],AnswersChosen:answerChosen, userCount:ActionCount, hintCount:hintButtonCount ))
            print(currentReport)

这段代码的输出可以这样看:

在我的代码中,我使用 Alamofire 将 JSON 文件发送到 Laravel。我希望能够通过 Alamofire 发送将用户输入记录为 JSON 文件的 currentReport。因此,如何将我的数组转换为 JSON 文件?感谢您的帮助

【问题讨论】:

  • 使用JSONEncoder对其进行编码。请始终以大写字母开头的结构和变量始终以小写字母开头。

标签: json swift struct alamofire


【解决方案1】:

您可以使用JSONEncoder 的实例将您的数组编码为Data

let encoder = JSONEncoder()
do {
    let data = try encoder.encode(currentReport)
} catch {
    print(error)
}

然后使用write(to:options:) 函数将Data 保存到文件中,如下所示:

do {
    if var url = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first {
        url.appendPathComponent("reports.json")
        try data.write(to: url)
    }
} catch {
    print(error)
}

完整的代码可能如下所示:

do {
    let reports = [Report(question: "", userCount: 1, hintCount: 1)]
    let data = try JSONEncoder().encode(reports)
    if var url = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first {
        url.appendPathComponent("reports.json")
        try data.write(to: url)
    }
} catch {
    print(error)
}

【讨论】:

  • 您好,感谢您的回复,但我希望得到一个解决方案,了解如何将我的数组 currentReport 保存为 JSON 文件
  • @AyushiAnand 对不起,我把你的问题弄错了。我更新了我的答案。
  • 您好,感谢您的编辑!我是 swift 新手,所以我对此感到非常困惑。只是想澄清一下, write(to:options:) 函数的代码,它去哪里了?因为现在它给了我一个错误:'在范围内找不到'数据''
  • @AyushiAnand 你可以把洞if 语句放在编码过程的do 块中。 (以上代码)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-05
  • 1970-01-01
  • 1970-01-01
  • 2013-04-13
  • 1970-01-01
相关资源
最近更新 更多