Swift3、Xcode8でAPIを用いた結果をtableviewcellに表示したいのですが
デバックで確認すると、描画が終わってからAPIの結果が返ってきてcellが空の状態で描画されます。
色々調べてAlamofireを用いてAPI(JSON形式)を取得してSwiftyJSONで遅れて結果の出力は確認出来たのですがAPIの結果がtableviewcellに描画されるまで待つにはどのようにAlamofireを使用すればよいのでしょうかご教授ください。
追記
元tableviewのcellをタップ→storyboard上でe.g.pushにて次tableviewに遷移
そしてtableviewcellに描画
この流れの今元tableviewのcellをタップでAPIの結果をe.g.push前に欲しいのですがe.g.push後にAPIの結果が返ってきます。
###発生している問題・エラーメッセージ
エラーはありません、非同期処理でAPIの結果を待つ処理を行いたです。
エラーメッセージ
###該当のソースコード
Swift3 元tableviewのcellがタップされたとき
画面遷移はstoryboard上で実装
Swift3
1// Cell が選択された場合 2 override func tableView(_ table: UITableView,didSelectRowAt indexPath: IndexPath) { 3 appDelegate.aiueo = indexPath.row 4 5 6 var apiString:String 7 apiString = (indexPath.row.description) 8 9 10 11 let url = "http://xxxxxxxxxxx.jp/API/"+apiString+".json" 12 urlString = url 13 14 //API URL check 15 print(urlString) 16 17 //#add array初期化 18 //画面遷移先で以下のArrayを使用してcell描画するために利用 19 self.appDelegate.xAR = [] 20 self.appDelegate.yAR = [] 21 22 Alamofire.request(url) 23 .responseJSON { response in 24 //print(response.result.value) // responseのresultプロパティのvalueプロパティをコンソールに出力 25 guard let object = response.result.value else { 26 return 27 } 28 var json = JSON(object) 29 // xAR,yARに値を入力して画面遷移先で描画に利用 30 for i in 0 ..< 1000{ 31 32 if(json["items"][i]["value"].string == nil) 33 { 34 //以下のログが次画面へ遷移した後にログが表示されます 35 print("-----API取得完了----",self.appDelegate.xAR) 36 break 37 } 38 else 39 { 40 self.appDelegate.xAR.append(json["items"][i]["value"].stringValue) 41 self.appDelegate.yAR.append(json["items"][i]["URL"].stringValue) 42 43 } 44 45 46 } 47 48 } 49 }
以下画面遷移先のコード
import UIKit import SwiftyJSON import Alamofire class aTableViewController: UITableViewController{ var selectedInfo : String? var urlString: String? override func viewDidLoad() { super.viewDidLoad() tableView.rowHeight = 35 } var appDelegate:AppDelegate = UIApplication.shared.delegate as! AppDelegate //Table Viewのセルの数を指定 override func tableView(_ table: UITableView, numberOfRowsInSection section: Int) -> Int { return self.appDelegate.xAR.count } //各セルの要素を設定する override func tableView(_ table: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { //tableCell の ID (aCell)で UITableViewCell のインスタンスを生成 let cell = table.dequeueReusableCell(withIdentifier: "aCell", for: indexPath) // Tag番号100でUILabel インスタンスの生成 let aLabel = table.viewWithTag(100) as! UILabel aLabel.text = "\(self.appDelegate.xAR[indexPath.row])" return cell } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } }
###試したこと
###補足情報(言語/FW/ツール等のバージョンなど)
Swift3 Xcode8
回答1件
あなたの回答
tips
プレビュー