Как отредактировать мою функцию и добавить массив параметров?

#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