2017-08-30 35 views
-2

私の結果を私のViewControllerでアクセスするための補完コールバックに渡すことは非常に困難です。 forループを実行するとオブジェクトを印刷できますが、オブジェクト内の特定の値にはアクセスできません。私のViewControllerタイプAnyには添え字のメンバーはありません

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

答えて

0

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) 
      } 
     } 
    ) 
} 

問題は、エラーメッセージがあなたを言っているまさにです:変数に添字ために、それは添字をサポート型として宣言する必要がありますが、あなたはしましたあなたの配列をAnyとして宣言しました。そして、最も基本的な型であるAnyは、サブスクリプトをサポートしていません。

代わりにこのようなあなたのgetMedia関数を宣言、あなたの配列は辞書が含まれていると仮定すると:辞書は文字列以外のキーが含まれているかもしれないという可能性があるかどう

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

または、:

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

ディクショナリの値の型がすべて同じ場合は、Anyを適切な型に置き換えます。

関連する問題