2017-08-30 2 views
-2

Je trouve qu'il est très difficile de transmettre mon résultat dans mon rappel de fin d'accès dans mon ViewController. Je peux imprimer mon objet quand je fais ma boucle for mais je ne peux pas accéder aux valeurs spécifiques à l'intérieur de l'objet.Type N'importe lequel n'a aucun membre indice

public func getMedia(completion: @escaping (Array<Any>) ->()){ 
    Alamofire.request(URL(string: MEDIA_URL)!, 
     method: .get) 
     .responseJSON(completionHandler: {(response) -> Void in 
      if let value = response.result.value{ 
       let json = JSON(value).arrayValue 
       completion(json) 
      } 
     } 
    ) 
} 

Dans mon ViewController

getMedia(){success in 
     for item in success{ 
      print(item["image"]) //This causes error 
      print(item) //This prints the object perfectly 
     } 
    } 

Répondre

0

Le problème est exactement ce que le message d'erreur vous dit: à indicer une variable, il doit être déclaré comme un type qui prend en charge subscripting, mais vous avez a déclaré votre tableau comme contenant Any. Et Any, étant le type le plus basique, ne supporte pas l'indice.

En supposant que votre tableau contient des dictionnaires, déclarez votre fonction getMedia comme ceci:

public func getMedia(completion: @escaping ([[String : Any]]) ->())

Ou, s'il y a une chance que le dictionnaire peut contenir des clés non-chaîne:

public func getMedia(completion: @escaping ([[AnyHashable : Any]]) ->())

Si les valeurs du dictionnaire ont toutes le même type, remplacez Any par ce type, selon le cas.