2017-04-15 1 views
1

Je reçois l'erreur: Utilisation d'identificateur non résolu 'json'Utilisation d'identificateur non résolu 'json' (Swift 3) (Alamofire)

de cette ligne: if let data = json["data"] ...

Ceci est l'extrait de code en rapport avec l'erreur

 // check response & if url request is good then display the results 
     if let json = response.result.value! as? [String: Any] { 

      print("json: \(json)") 
     } 

     if let data = json["data"] as? Dictionary<String, AnyObject> { 
      if let weather = data["weather"] as? [Dictionary<String, AnyObject>] { 
       if let uv = weather[0]["uvIndex"] as? String { 
        if let uvI = Int(uv) { 
         self.uvIndex = uvI 
         print ("UV INDEX = \(uvI)") 
        } 
       } 
      } 
     } 

Répondre

1

Vous avez un problème de portée. La variable json est uniquement accessible dans l'instruction if let.

Pour résoudre ce problème, une solution facile est de déplacer le reste du code à l'intérieur des accolades de la première déclaration if let:

if let json = response.result.value! as? [String: Any] { 
    print("json: \(json)") 
    if let data = json["data"] as? Dictionary<String, AnyObject> { 
     if let weather = data["weather"] as? [Dictionary<String, AnyObject>] { 
      if let uv = weather[0]["uvIndex"] as? String { 
       if let uvI = Int(uv) { 
        self.uvIndex = uvI 
        print ("UV INDEX = \(uvI)") 
       } 
      } 
     } 
    } 
} 

Comme vous pouvez le voir à partir de votre code, l'imbrication commence à faire difficile de lire votre code. Une façon d'éviter l'imbrication consiste à utiliser l'instruction guard, qui conserve la nouvelle variable dans la portée externe.

guard let json = response.result.value else { return } 

// can use the `json` variable here 
if let data = json["data"] // etc. 
+1

Merci, corrigeant le problème de portée, résolu le problème! –

+1

Super! Si vous marquez ma réponse comme acceptée, il sera plus facile de trouver pour les autres à l'avenir s'ils ont le même problème. – nathan