web-dev-qa-db-fra.com

Tapez 'Tout' N'a pas de membre avec indice dans xcode 8 Swift 3

Mon application est censée accéder à un emplacement spécifique pour extraire le site Web dont elle a besoin pour être chargée. Dans la version 2.3, cela fonctionnait à merveille, mais depuis que j'ai mis à jour xcode (pour lequel je n'ai pas beaucoup d'expérience), il me donne l'erreur "type 'N'importe quel membre' n'a pas de membre avec un indice et en soulignant le" json " juste avant la troisième ligne

...Retriever = json["WEB"]...

c'est le code qui s'y rapporte.

let json = try JSONSerialization.jsonObject(with: data!, options:.allowFragments)

      if let Retriever = json["WEB"] as? [[String: AnyObject]] {

                 for website in Retriever {

                    if let name = website["URL"] as? String {

                          self.loadAddressURL(name)

J'ai l'impression de manquer quelque chose de petit. S'il existe un meilleur moyen de le faire, j'aimerais beaucoup des suggestions. L'URL renvoie ce JSON

{
  "WEB" : [
           {
            "URL" : "http://www.google.com"
           }    
          ]
}

mais j'aimerais bien si je pouvais le simplifier juste

{"URL":"http://www.google.com"}
39
DaVinci1223

Essayez ceci:

let json = try JSONSerialization.jsonObject(with: data!, options:.allowFragments) as! [String:AnyObject]

Manière sûre:

do {
    if let json = try JSONSerialization.jsonObject(with: data!, options:.allowFragments) as? [String:Any] {
        print(json)
    }
} catch let err{
    print(err.localizedDescription)
}

Vous devez convertir le type Any en Swift type de dictionnaire [String:AnyObject].

Édition: Swift 3
Dans Swift 3, l’objet de AnyObject est plus clair. Donc, plus favorable Swift Le type de dictionnaire sera [String:Any].

Any est un alias pour tout type de données.
AnyObject est un alias pour tout type de données dérivé d'une classe.

Pour plus d'informations, visitez: https://craiggrummitt.com/2016/09/16/any-vs-anyobject-vs-nsobject-in-Swift-3/

64
Bista