2017-08-30 28 views
0

我將JSON數據傳遞給此表視圖控制器。如何設置JSON數據的行數?如何定義..在Swift 3中設置來自傳入的JSON數據的行數

打印(passedData),輸出:

["jobs": <__NSArrayM 0x17005d9d0>({ 
jobDate = "2017-08-31"; 
jobEndTime = 1504144800; 
jobID = 87; 
jobTime = 1504137600;}), 
"result": success, "message": Retrieve Sucessfully] 

我的代碼

var passedData: [String: Any]! 

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

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

let row : UITableViewCell = UITableViewCell(); 
//Add every Row 
return row;  
} 

回答

0

您需要使用「作業」鍵訪問字典的內容。

var jobIDs = [Int]() 

override func viewDidLoad(){ 
    super.viewDidLoad() 
    guard let jobs = passedData["jobs"] as? [[String:Any]] else {return } 
    for job in jobs { 
     if let idString = job["jobID"] as? String, let id = Int(idString) { 
      jobIDs.append(id) 
     } 
    } 
    tableView.reloadData() 
} 
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return jobIDs.count 
} 

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

    let cell = UITableViewCell() 
    cell.textLabel.text = "\(jobIDs[indexPath.row])" 
    return cell 
} 

如果你想從passedData字典使用數據,這將是有意義的做解析在一個單獨的功能,這樣你就可以在所有UITableViewDataSource功能使用的分析結果。使用這種方法,您可能需要在解析函數結束時調用tableView.reloadData()

+0

如何在每一行顯示jobID? –

+0

@WanJern檢查我更新的答案。使用它你可以在每個單元的標籤上顯示jobID –

+0

謝謝!我嘗試了新的方法。 jobIDs.count似乎不起作用。因爲沒有任何行顯示... –

0

也許這可以幫助您!

var passedData: [String: Any]! 

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
//jobs.count 
    if let jobs = passedData["jobs"] as? [[String:Any]] { 
     return jobs.count 
    } 
    return 0 
}