Почему возвращается nil для Int64?

Имена клиентов возвращаются корректно, но целые числа (number of awards, number of cars, number of dogs) возвращаются nil. Такое ощущение, что API не проходит (поэтому включается ‘?? 0). Блин, но как тогда проходят имена клиентов в string? Ведь это все тот же API.

Вот мой код:

func getAllClients() {
    AF.request("xxxxxxxxxxxxx", headers: headers).responseJSON {response in
        let result = response.value
        var allCli: [ClientsData] = []
        if result != nil {
            let dataDictionary = result as! [Dictionary <String, AnyObject>]
            for clientsData in dataDictionary {
                let cllstname = clientsData["cllstname"] as? String ?? "Error"
                let noofawards = clientsData["noofawards"] as? Int64 ?? 0
                let noofcars = clientsData["noofcars"] as? Int64 ?? 0
                let noofdogs = clientsData["noofdogs"] as? Int64 ?? 0
                let clientsObject = ClientsData (cllstname: cllstname, noofawards: noofawards, noofcars: noofcars, noofdogs: noofdogs)

                allCli.append(clientsObject)
            }
        }
        self.allClients = allCli.sorted(by: { $0.noofawards > $1.noofawards })
    }
}

Есть идеи?


Ответы (1 шт):

Автор решения: schmidt9

Проверьте и сравните аналогичный пример, который вполне работает

func getAllClients() {
    let url = "https://jsonplaceholder.typicode.com/posts" // сервис для тестирования
    
    AF.request(url).responseJSON {response in
        let result = response.value
        
        if result != nil {
            let dataDictionary = result as! [Dictionary <String, AnyObject>]
            for clientsData in dataDictionary {
                let userId = clientsData["userId"] as? Int64 ?? 0
                let id = clientsData["id"] as? Int64 ?? 0
                assert(userId != 0 && id != 0)
                print(userId, id, "\n============")
            }
        }
    }
}

Проверьте значения в clientsData, воспользовавшись точкой останова

введите сюда описание изображения

Дополнение

Если у вас числовые значения приходят в виде строк, то можно сделать примерно так (на моем примере - сначала пытаемся привести AnyObject к строке, а затем парсим число)

let userId = Int64(clientsData["userId"] as? String ?? "0")
→ Ссылка