0
votes

besoin d'obtenir le nom du pays de l'API Open

a besoin d'obtenir le nom de pays d'un appel d'API ci-dessous Call:

https://rescountries.eu/ Reste / v1 / tout p>

My Code: P>

var arrRes = []
func getCountry() {
    let Url: String = "https://restcountries.eu/rest/v1/all"   
    Alamofire.request(Url).responseJSON { (responseData) -> Void in
        do {
            if let datas = responseData.result.value {
                let data  = (datas as AnyObject).data(using: .utf8)!
                let parseData = try JSONSerialization.jsonObject(with: data, options: [])
                for country in parseData {
                    if let name = country["name"] as? String {
                        print(name)
                    }
                }
            }
        }
        catch let error as NSError {
            print(error)
        }
    }
}


6 Réponses :


2
votes

Remplacer attrape code> bloc de la déclaration avec ceci.

do {
    if let countries = responseData.result.value as? [[String: Any]] {
        for country in countries {
            if let name = country["name"] as? String {
                print(name)
            }
        }
    }
}
catch let error as NSError {
    print(error)
}


3 commentaires

Impossible d'invoquer "JSONOBJECT" avec une liste d'arguments de type '(avec: Toute option: [Any])' On `Laissez parsedata = Essayez jsonserialization.jsonObject (avec: Datas, options: []) . J'ai déjà essayé cela aussi..that Temps aussi la même erreur


Vous n'avez pas besoin de l'erreur comme nserror partie. Il suffit de faire } catch {improvement (erreur)} .


Merci pour la pointe @RMADDY.



1
votes

supprimer juste cette ligne

let data = (Datas comme anyobject) .Data (en utilisant: .utf8)! CODE> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> La liaison optionnelle vient d'attribuer data ​​code>, puisque code> valeur code> est de type de données? code>, à partir de la liaison optionnelle, obtenez code> code> P>

...jsonObject(with: data, options: []) as? [[String:Any]]


1 commentaires

Réponse valide. Je suggère d'essayer d'éviter le comme! , vous pouvez le faire comme? pour la sécurité;)



1
votes

Vous pouvez essayer xxx


xxx

2 commentaires

Encore une fois, ne pouvait pas lancer la valeur du type '__nsarrayi' (0x1fa903a70) à 'nsdata' (0x1fa901dd8)


@David Pas besoin de faire de la réponse si vous avez besoin de données avec Codable DOPPONEDATA




2
votes

Essayez ceci, c'est bien fonctionne pour moi. XXX


0 commentaires

0
votes

Mon code, son fonctionnement bien pour moi.

SWIFT 5 P>

 public func getCountry(completion: @escaping ([String]) -> ()) {
            let url: String = "https://restcountries.eu/rest/v1/all"
            AF.request(url).responseJSON { (responseData) -> Void in
                do {
                    guard let data = responseData.data else { return }
                    let res  = try JSONDecoder().decode([CountryName].self,from:data)
                    completion(self.getCountryName(countryName: res))
                }
                catch {
                    print(error)
                }
            }
        }

 struct CountryName: Codable {
   let name: String
 }

 private func getCountryName(countryName:[CountryName]) -> [String]{
      var country:[String]  = []
      for index in 0...countryName.count - 1{
           country.append(countryName[index].name)
      }
    return country
 }


0 commentaires