首页 > 解决方案 > 如何编辑我的函数并添加参数数组?

问题描述

我有 func Json 解码,我如何现代化我的函数并添加参数数组类型我的“模型”数据?

我需要在另一个全局数组中添加所有解码数据“让模型”。例子:

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()
}

标签: arraysjsonswift

解决方案


首先在这里更改: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()
    }

推荐阅读