Массив из объекта jsonDecoder - PullRequest
0 голосов
/ 16 декабря 2018

Это может быть очень простой вопрос (извините!).

Я хотел бы связать базу данных MySQL с приложением Quiz в Swift 4. Поэтому я подключился к service.php и получил информацию с помощьюdecodable.

Как я могу получить доступ к этой информации, чтобы показать на этикетке?Нужно ли создавать новый массив и добавлять объекты?

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

Спасибо!

1 Ответ

0 голосов
/ 16 декабря 2018

// 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.
...