【问题标题】:Array from a jsonDecoder object来自 jsonDecoder 对象的数组
【发布时间】:2018-12-16 12:23:38
【问题描述】:

这可能是一个非常简单的问题(对不起!)。

我想将 mySQL 数据库链接到 Swift 4 中的测验应用程序。 因此我连接到一个 service.php 并获得了可解码的信息。

如何访问此信息以显示在标签中?我是否必须创建一个新数组并附加对象?

import UIKit

struct Question: Codable {

let id: String?
let frage: String?
let antwort1: String?
let antwort2: String?
let antwort3: String?
let antwort4: String?
let correct: String?
let notiz: String?
let lernsektorID: String?
let lerneinheitID: String?
let lernbereichID: String?
let schwierigkeitID: String?
let redakteur: String?
let createdAt: String?

enum CodingKeys: String, CodingKey {
    case id = "ID"
    case frage = "Frage"
    case antwort1 = "Antwort1"
    case antwort2 = "Antwort2"
    case antwort3 = "Antwort3"
    case antwort4 = "Antwort4"
    case correct = "Correct"
    case notiz = "Notiz"
    case lernsektorID = "LernsektorID"
    case lerneinheitID = "LerneinheitID"
    case lernbereichID = "LernbereichID"
    case schwierigkeitID = "SchwierigkeitID"
    case redakteur = "Redakteur"
    case createdAt = "created_at"
}
}

var fragen = [Question]()

let url = "https://redaktion.pflegonaut.de/service.php"
let urlObj = URL(string: url)

URLSession.shared.dataTask(with: urlObj!) { (data, response, error) in
do {
     self.fragen = try JSONDecoder().decode([Question].self, from: data!)
// can I use .append() here?
// maybe in a for loop?

} catch {
    print(error)
}
}.resume()

所以我可以使用如下元素:

//
// let randomizedQuestion = fragen.frage.randomElement()
// 
// questionOutlet.text = randomizedQuestion

谢谢!

【问题讨论】:

    标签: arrays json dictionary swift4 decodable


    【解决方案1】:

    // NECESSARY? var QuestionBankJson: [QuestionJson] { var questionListJson = [QuestionJson]() }

    不,只需声明一个数组并将结构命名为Question

    var questions = [Question]()
    

    并分配

    do {
      self.questions = try JSONDecoder().decode([Question].self, from: data!)
      print(self.questions[1].Frage!) 
    } catch {
        print(error) // never print something meaningless like "we got an error"
    }
    

    注意事项:

    • 请遵守变量名以小写字母开头的命名约定。
    • 如果您负责 JSON,请同时声明小写键,否则请使用 CodingKeys
    • 尽可能声明结构成员为非可选成员。
    • 在捕获Codable 错误时,切勿打印无意义的文字字符串。始终打印 error 实例。
    • 使用比这种任意德语格式更好的日期字符串格式。 UNIX 时间戳、SQL 日期字符串或 ISO8601 是可排序的,甚至可以解码Date

    【讨论】:

    • 谢谢!我尽力使代码符合标准格式。
    • 但是如何访问“问题”数组到 questionOutlet.text = question[1].Frage
    • 在类的顶层声明数组。然后根据您的设计通过索引或循环访问数组。 (考虑到 Swift 中的索引是从零开始的)。
    • 对不起,我没听懂。你能告诉我怎么做吗?我在顶部声明了一个数组,但是当我打印它时,它没有显示任何结果。除此之外,我使用了 CodingKeys,但它不适合可编码协议。
    • 最好编辑您的问题并添加相关代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-29
    • 2019-02-26
    • 2022-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多