ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 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.")

}

}

}