#json #swift #dictionary #key-value
#json #swift #словарь #ключ-значение
Вопрос:
У меня есть локальный файл JSON под названием ItemInfo.json, который содержит один словарь с почти 6000 парами ключ-значение, состоящими из имени элемента и идентификатора элемента.
{ "itemName1" : 2564,
"itemName2" : 470,
"itemName3" : 1849,
"itemName4" : 60,
"itemName5" : 103 }
// continues for a few thousand more
У меня нет проблем, когда дело доходит до загрузки файла JSON в консоль, но я не знаю, как распечатать имена элементов в tableview в виде списка. Идентификаторы в списке не нужны, так как я просто хочу напечатать имена.
public class DataLoader {
@Published var userData: [String:Int] = [:]
init() {
load()
}
func load() {
if let fileLocation = Bundle.main.url(forResource: "itemInfo", withExtension: "json") {
do {
let data = try Data(contentsOf: fileLocation)
let jsonDecoder = JSONDecoder()
let dataFromJson = try jsonDecoder.decode([ String: Int].self, from: data)
self.userData = dataFromJson
} catch {
print(error)
}
}
}
}
Как мне заполнить tableview всеми именами элементов в TableViewController?
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
cell.textLabel!.text = // not sure what goes here to populate list with names.
return cell
}
Ответ №1:
Объявить userData
как массив. Заменить
@Published var userData: [String:Int] = [:]
с помощью
@Published var userData: [String] = []
и присвоить ключи словаря массиву
self.userData = Array(dataFromJson.keys)
В cellForRow
отобразить элемент с заданным индексом
cell.textLabel!.text = userData[indexPath.row]
Комментарии:
1. Спасибо за ваш ответ. Я пошел дальше и попробовал это, и он говорит «Нет точных совпадений при вызове инициализатора». У меня нет структуры item, но я не уверен, нужна ли она. Я попытался также изменить декодер на JSONDecoder.decode([String].self, из: data), и это дало мне «Тип выражения ‘()’ неоднозначен без дополнительного контекста».
2. Большое вам спасибо! Это, казалось, сделало свое дело! Теперь это тоже имеет смысл, ха-ха, спасибо!!