【发布时间】:2019-07-01 06:25:52
【问题描述】:
我如何通过可编码来发出相同的 API 请求? 在我的应用中,这个函数在每个调用 API 的视图中重复。
func getOrders() {
DispatchQueue.main.async {
let spinningHUD = MBProgressHUD.showAdded(to: self.view, animated: true)
spinningHUD.isUserInteractionEnabled = false
let returnAccessToken: String? = UserDefaults.standard.object(forKey: "accessToken") as? String
let access = returnAccessToken!
let headers = [
"postman-token": "dded3e97-77a5-5632-93b7-dec77d26ba99",
"Authorization": "JWT \(access)"
]
let request = NSMutableURLRequest(url: NSURL(string: "https://somelink.com")! as URL,
cachePolicy: .useProtocolCachePolicy,
timeoutInterval: 10.0)
request.httpMethod = "GET"
request.allHTTPHeaderFields = headers
let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
if (error != nil) {
print(error!)
} else {
if let dataNew = data, let responseString = String(data: dataNew, encoding: .utf8) {
print("----- Orders -----")
print(responseString)
print("----------")
let dict = self.convertToDictionary(text: responseString)
print(dict?["results"] as Any)
guard let results = dict?["results"] as? NSArray else { return }
self.responseArray = (results) as! [HomeVCDataSource.JSONDictionary]
DispatchQueue.main.async {
spinningHUD.hide(animated: true)
self.tableView.reloadData()
}
}
}
})
dataTask.resume()
}
}
【问题讨论】:
-
使用
Codable添加您要解析的 JSON 响应。 -
你需要在你的模型中实现
func encode(to encoder: Encoder) throws和convenience init(from decoder: Decoder) throws,然后你可以做类似var arrayOfComments : [CommentModel] = try JSONDecoder().decode([CommentModel].self, from: response.result.value!)的事情 -
信息:您可以使用后台线程进行网络请求。更新 UI 的主线程
-
@ReinierMelian 请您详细说明一下吗?
-
将您的 JSON 响应粘贴到此站点上,您将获得 Codable 数据 json4swift.com