Отображать данные из базы данных на дисплее в формате JSON в Xcode

#json #swift #database #xcode #label

#json #swift #База данных #xcode #метка

Вопрос:

класс ViewController: UIViewController { @IBOutlet var fname: UILabel!

 struct Class: Codable {

    let FName: String
    let LName: String

    enum CodingKeys: String, CodingKey {
        case FName = "first_name"
        case LName = "last_name"
    }
}
override func viewDidLoad() {
    super.viewDidLoad()

    let url = URL(string: "https://domain(^_^).com/users.php")

    URLSession.shared.dataTask(with: url!, completionHandler: {(data, response, error) in
        guard let data = data, error == nil else { print(error!); return }

        let decoder = JSONDecoder()
        let classes = try! decoder.decode([Class].self, from: data)

        for myClass in classes {
            print(myClass.FName)
            print(myClass.LName)
        }
        DispatchQueue.main.async {
            self.fname.text = "I don't know what to wirte here to change the label to the data which I get fron database"
        }
    }
        ).resume()
}
  

}

В конце я просто не знаю, как переписать текст моей метки на данные, которые я получаю из базы данных. Я пытался отобразить данные в TableView, но у меня не получилось, мой единственный способ получить помощь здесь, youtube не смог мне хорошо помочь.

Комментарии:

1. У вас есть массив Classe объектов. Что вы хотите показать для своего ярлыка? Откуда?

2. Вы должны читать данные JSON с помощью JSONDecoder только в том случае, если вы уверены, что сможете поместить данные в свою кодируемую модель. Другими словами, с помощью него будет легче читать данные JSONSerialization .

3. @Larme Я пытаюсь получить данные из базы данных, и у меня это получилось. Я получаю first_name и last_name из базы данных и хочу отобразить их на дисплее.

4. Просто, согласно вашему коду, у вас должно быть 3, 4, n Class объектов, потому что classes это массив. Итак, если вы хотите поместить первое, if let fName = classes.first.FName { self.fname.text = fName} если вы хотите второе, замените classes.first.FName на classes[1].FName и т.д.

5. ты потрясающий, братан, теперь это работает. Большое спасибо :). @Larme

Ответ №1:

Попробуйте это!!

 for myClass in classes {

        print(myClass.FName)
        print(myClass.LName)

  DispatchQueue.main.async {
        self.fname.text = myClass.FName
        self.lname.text = myClass.LName // In case you have second label
  }
}
  

Комментарии:

1. спасибо за ваш ответ. Я уже пробовал это, но это не сработало.