2017-09-01 2 views
0

サーバーからJSONデータをテーブルビューセルに表示しようとしています。レスポンス値の取得に問題があります。 jobTime.countを取得してjobEndTimeの値を取得する方法は? jobTime-jobEndTimeを各セルに表示したい。サーバーからJSONデータをSwift 3のテーブルビューセルに挿入する方法

カスタムの構造化ジョブを宣言する必要があると思います。しかし、私はどのように作成するのか分からない。乱雑なコードについては申し訳ありません

struct Job { 
    var jobDate: String 
    var jobEndTime: Int 
    var jobID: Int 
    var jobTime: Int 

    init(dict: [String:AnyObject]) { 
     self.jobDate = dict["jobDate"] as! String 
     self.jobEndTime = dict["jobEndTime"] as! Int 
     self.jobID = dict["jobID"] as! Int 
     self.jobTime = dict["jobTime"] as! Int 
    } 
} 

var jobs = [Job]() 
override func viewDidLoad() { 
    super.viewDidLoad() 
    retrieveTime() 
} 

func retrieveTime(){ 
    if let crew = user!["crew"] as? [String:Any], let crewID = crew["crew_id"] as? String{ 

     let param = ["action": "retrieve time", "job": ["crew_id": crewID, "jobDate": passedData]] as [String : Any] 

     let headers = [ 
      "content-type": "application/json", 
      "cache-control": "no-cache" 
     ] 

     if let postData = (try? JSONSerialization.data(withJSONObject: param, options: [])) { 

      let request = NSMutableURLRequest(url: URL(string: "http://52.221.231.3/gv/app_api.php")!, 
               cachePolicy: .useProtocolCachePolicy, 
               timeoutInterval: 10.0) 
      request.httpMethod = "POST" 
      request.allHTTPHeaderFields = headers 
      request.httpBody = postData 

      let task = URLSession.shared.dataTask(with: request as URLRequest) { 
       (data, response, error) -> Void in 
       DispatchQueue.main.async(execute: { 
        if let json = (try? JSONSerialization.jsonObject(with: data!, options: [])) as? NSDictionary 
        { 
         let result = json["result"] as? String 

         if (result == "success") { 

          if let jsonData = json["jobs"] as? [[String:AnyObject]] { 
           self.jobs = jsonData.map { Job(dict: $0) } 
          } 
           print(self.jobs) 
           self.tableView.reloadData() 
          } 
         }else{ 
          print(result!) 

         } 
        } 
       }) 
      } 

      task.resume() 
     } 

    } 

} 

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return jobs.count 
} 

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCell(withIdentifier: "jobCell", for: indexPath) 
    let job = self.jobs[indexPath.row] 
    cell.textLabel?.text = job.jobDate 

    return cell 
} 

、これはスウィフトでJSONを扱う私の第一の時間です。提案として

JSON Data : 

    { 
    jobs = (
     { 
      jobDate = "2017-09-07"; 
      jobEndTime = 1504749600; 
      jobID = 104; 
      jobTime = 1504746000; 
     }, 
       { 
      jobDate = "2017-09-07"; 
      jobEndTime = 1504756800; 
      jobID = 105; 
      jobTime = 1504753200; 
     } 
    ); 
    message = "Retrieve Sucessfully"; 
    result = success; 
} 
+0

JSONの出力を教えてください。 – Siyavash

+0

まず、viewDidLoadにtableview.reload()を配置しないでください。すべての処理の後でURLSessionコールバックの中に入れてください。データを受け取った後に実行されます。 –

+0

さて、質問を更新しました。 –

答えて

0

、Alamofireは、ネットワークの要求を送信するための優れたフレームワークであり、それはhere発見されました。

また、JSONを使用する場合、Swiftはあまり良くありません。あなたはそれのための余分なコードをたくさん書く必要があります。 JSONを扱うための人気のあるライブラリはSwiftyJSONと呼ばれ、Alamofireとうまく機能し、hereが見つかりました。

これは、あなたがこのようなJSONレスポンスとリクエストを書くことができます:

Alamofire.request(url, method: .get).validate().responseJSON { response in 

    switch response.result { 

    case .success(let value): 

     let json = JSON(value) 

     let name = json["name"].stringValue 
     let job = json["teacher"].stringValue 

    case .failure(let error): 

     print(error) 
    } 
} 

SwiftyJSONのreadmeファイルにはどのように行う必要がありますJSONの結果をループへの情報が含まれています。

+0

JSONSerializationを使用してください。別のフレームワークを使用する必要はありません。それは短く見えますが、エラーチェックをしておらず、結果をどこにも保存していません。 – gnasher729

関連する問題