ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 02.12.2023
Просмотров: 7
Скачиваний: 1
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Что такое JSON?
JSON , также известный как нотация объектов JavaScript, представляет собой облегченный формат данных. Он работает в парах ключ-значение и принимает только определенные типы значений: object , array , string , number , boolean , null . Вот простой пример того, как выглядит JSON:
{
"name": "John",
"age": 30,
"car": null
}
Создайте свою модель
Давайте начнем с создания нашей модели в нашем приложении. В качестве примера мы будем использовать модель Animal . Каждое животное будет иметь идентификатор, имя, возраст и тип.
// Animal.swift
struct Animal: Identifiable, Decodable {
var id: Int
var name: String
var age: Int
var type: String
}
Создайте файл JSON с данными
Затем создайте файл JSON в соответствии с только что созданной моделью. Поскольку мы хотим отображать в нашем приложении несколько животных, наш JSON будет массивом Animals .
// animalData.json
[
{
"id": 1001,
"name": "Toto",
"age": 3,
"type": "Dog"
},
{
"id": 1002,
"name": "Betsy",
"age": 7,
"type": "Cat"
},
{
"id": 1003,
"name": "Olive",
"age": 36,
"type":
"Tortoise"
},
{
"id": 1004,
"name": "Jupiter",
"age": 10,
"type": "Parrot"
},
{
"id": 1005,
"name": "Ulysse",
"age": 17,
"type": "Monkey"
}
]
Примечание. Не забудьте проверить данные JSON, так как вы можете получить ошибки при декодировании данных. Вы можете использовать JSONLint , чтобы проверить, действителен ли ваш JSON.
Создайте свои данные модели
Далее давайте создадим ModelData , куда мы будем загружать и анализировать данные JSON в нашем приложении.
// ModelData.swift
var animals: [Animal] = load("animalData.json")
func load<T: Decodable>(_ filename: String) -> T {
let data: Data
guard let file = Bundle.main.url(forResource: filename, withExtension: nil)
else {
fatalError("Couldn't find \(filename) in main bundle.")
}
do {
data = try Data(contentsOf: file)
} catch {
fatalError("Couldn't load \(filename) from main bundle:\n\(error)")
}
do {
let decoder = JSONDecoder()
return try decoder.decode(T.self, from: data)
} catch {
fatalError
("Couldn't parse \(filename) as \(T.self):\n\(error)")
}
}
Приведенная выше функция load() берет файл из пути к файлу, который вы передали в качестве аргумента, и декодирует данные JSON в формат, который может прочитать Swift. Если есть ошибка, она будет напечатана в консоли.
После того, как функция загрузки будет завершена, ваши данные будут доступны и готовы к использованию, просто вызвав переменную animals . Важно указать тип данных, которые вы хотите сохранить, в переменной animals , так как функция load() должна знать, какой тип данных она должна выводить.
Используйте свои данные в своем представлении
Вам просто нужно вызвать переменную животных и выполнить итерацию по каждому животному, чтобы отобразить их в своем представлении.
var body: some View {
VStack {
ForEach(animals) { animal in
Text("\(animal.name) is a \(animal.type) and is \(animal.age) years old.")
}
}
}