#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. спасибо за ваш ответ. Я уже пробовал это, но это не сработало.