#arrays #json #swift
#массивы #json #swift
Вопрос:
У меня есть функция декодирования Json, как я модернизирую свою функцию и добавляю массив параметров типа моих «модельных» данных?
Мне нужно добавить все данные декодирования «let model» в другой глобальный массив. Пример:
let myArray = [Any]()
в функции, я думаю, добавить
myArray.append(model.Welcome)
мой код для декодирования JSON:
struct Welcome: Codable {
let id: Int
let name, username, email: String
let address: Address
let phone, website: String
let company: Company
}
struct Address: Codable {
let street, suite, city, zipcode: String
let geo: Geo
}
struct Geo: Codable {
let lat, lng: String
}
struct Company: Codable {
let name, catchPhrase, bs: String
}
func userApiJsonCodableClass () {
guard let url = URL(string: "https://jsonplaceholder.typicode.com/users") else {return}
let task = URLSession.shared.dataTask(with: url) { (data, response, error) in
guard let dataResponse = data,
error == nil else {
print(error?.localizedDescription ?? "Response Error")
return }
do {
//here dataResponse received from a network request
let decoder = JSONDecoder()
let model = try decoder.decode([Welcome].self, from:
dataResponse) //Decode JSON Response Data
print("---------CodableClass---------")
print(model[0].website) //Output - 1221
} catch let parsingError {
print("Error", parsingError)
}
}
task.resume()
}
Комментарии:
1. Можете ли вы подробнее объяснить, чего вы на самом деле хотите?
Ответ №1:
Сначала измените здесь: var myArray = [Welcome]()
. Во-вторых, соберите свои элементы непосредственно в массив : myArray = try decoder.decode([Welcome].self, from: dataResponse) //Decode JSON Response Data
.
Не забудьте очистить массив в случае синтаксического анализа ошибок.
var myArray = [Welcome]()
struct Welcome: Codable {
let id: Int
let name, username, email: String
let address: Address
let phone, website: String
let company: Company
}
struct Address: Codable {
let street, suite, city, zipcode: String
let geo: Geo
}
struct Geo: Codable {
let lat, lng: String
}
struct Company: Codable {
let name, catchPhrase, bs: String
}
func userApiJsonCodableClass () {
guard let url = URL(string: "https://jsonplaceholder.typicode.com/users") else {return}
let task = URLSession.shared.dataTask(with: url) { (data, response, error) in
guard let dataResponse = data,
error == nil else {
print(error?.localizedDescription ?? "Response Error")
return }
do {
//here dataResponse received from a network request
let decoder = JSONDecoder()
myArray = try decoder.decode([Welcome].self, from:
dataResponse) //Decode JSON Response Data
print("---------CodableClass---------")
print(myArray.first?.website) //Output - 1221
} catch let parsingError {
print("Error", parsingError)
myArray = []
}
}
task.resume()
}
Ответ №2:
Простым способом вы можете напрямую добавить проанализированный массив в свой глобальный массив "myArray"
и использовать var
для myArray
подобных:
var myArray = [Welcome]()
myArray = try decoder.decode([Welcome].self, from:
dataResponse) //Decode JSON Response Data