Parse and mapping data in tableview with Alamofire and SwifrtJSON with completion handler(@escaping)

56 views Asked by At

I have data models. I make a request and get JSON. But I want to use the completion handler to add data to the table. How do I save data and display it in a tableview? I didn't use the entire data model for the test.

This is my data model

Text

This is my function for parsing and mapping

class Network {
    let baseUrl = URL(string:"https://ppbet-327310.appspot.com/api/games")
    func getCity(completion: @escaping([WelcomeElement]) -> ()) {
        guard let url = baseUrl else {return}
        AF.request(url, method: .get).responseJSON { (response) in
            switch response.result {
            case .success:
                guard let data = response.data else {return}
                let json = try! JSON(data: data)
                let arrayCount = json.array?.count ?? 0
                for i in 0..<arrayCount {
                    let name = json[i]["name"].string ?? "N/A"
                    if let betTypes = json[i]["betTypes"].array {
                        for i in 0..<betTypes.count {
                            guard let outcomesCounter = betTypes[i]["outcomesCounter"].int else {return}
                            guard let nameBet = betTypes[i]["name"].string else {return}     
                        }
                    }   
                    if let leagues = json[i]["leagues"].array {
                        for i in 0..<leagues.count {
                            guard let nameLeagues = leagues[i]["name"].string else {return}
                            if let events = leagues[i]["events"].array {
                                for i in 0..<events.count {
                                    guard let team1 = events[i]["team1"].string else {return}
                                    guard let team2 = events[i]["team2"].string else {return}
                                    guard let score1 = events[i]["score1"].string else {return}
                                    guard let score2 = events[i]["score2"].string else {return}
                                    if let betTypes = events[i]["betTypes"].array {
                                        for i in 0..<betTypes.count {
                                            guard let nameBetTypes = betTypes[i]["name"].string else {return}
                                            
                                            if let outcomesBetTypes = betTypes[i]["outcomes"].array {
                                                for i in 0..<outcomesBetTypes.count {
                                                    guard let name = outcomesBetTypes[i]["name"].string else {return}
                                                    guard let coefficient = outcomesBetTypes[i]["coefficient"].string else {return}
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
                
                DispatchQueue.main.async {
                    completion(/*????)*/)
                }
            case .failure(let error):
                print(error)
            }
        }
    }
}
0

There are 0 answers