gpt4 book ai didi

ios - 如何将服务器中的 JSON 数据放入 Swift 3 中的 TableView 单元格中

转载 作者:行者123 更新时间:2023-11-30 12:11:25 29 4
gpt4 key购买 nike

我正在尝试将服务器中的 JSON 数据显示到 TableView 单元格中。我在捕获响应值时遇到问题。如何获取jobTime.count并获取jobEndTime值?我想向每个单元格显示 jobTime-jobEndTime。

我想我必须声明一个自定义结构作业。但我不知道如何创建。

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
}

抱歉,代码很乱,这是我第一次在 Swift 中使用 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;
}

最佳答案

作为建议,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 自述文件包含有关如何循环遍历 JSON 结果的信息,您需要执行这些操作。

关于ios - 如何将服务器中的 JSON 数据放入 Swift 3 中的 TableView 单元格中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46005309/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com