swift - 如何快速从其他 API 解析 JSON
问题描述
我正在修改“Hacking with swift”项目 7 中的代码,以使用 API 获取 JSON 文件并将其放置在表格视图中
我有点不知道下一步该做什么,尝试移动对解析函数的调用并使用注释掉的代码
override func viewDidLoad() {
super.viewDidLoad()
let username = "UserName"
let password = "Password"
let loginData = String(format: "%@:%@", username,
password).data(using: String.Encoding.utf8)!
let base64LoginData = loginData.base64EncodedString()
let url = URL(string: "......")!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Basic \(base64LoginData)", forHTTPHeaderField:
"Authorization")
let task = URLSession.shared.dataTask(with: request) { data,
response,
error in
guard let data = data, error == nil else {
print("error")
return
}
if let httpStatus = response as? HTTPURLResponse {
parse(json: data)
print("status code = \(httpStatus.statusCode)")
}
}
task.resume()
}
// if let url = URL(string: urlstring){
// if let data = try? Data(contentsOf: url){
// parse(json: data)
// return
// }
// }
// showError()
//}
func parse(json: Data) {
let decoder = JSONDecoder()
if let jsonPetitions = try? decoder.decode(Petitions.self, from:
json) {
petitions = jsonPetitions.results
tableView.reloadData()
}
}
我收到“200”的状态代码,所以我知道 API 调用工作正常。
问题似乎在于调用解析函数我收到以下错误“调用闭包中的方法'解析'需要显式'自我。' 使捕获语义明确”
解决方案
1-错误意味着在self
此处添加
self.parse(json: data)
2-您应该在主线程中重新加载表作为URLSession.shared.dataTask
后台线程中运行的回调以避免意外结果/崩溃
DispatchQueue.main.async {
self.tableView.reloadData()
}
推荐阅读
- google-chrome - Getting this localhost:8080 prompt window on every new page or redirection
- android - 写电话号码不打电话
- arrays - 如何使列表视图表每 4 次压缩一次
- r - 使用 getSymbols("JOSJFSODFJSODfJ", src = "FRED") 时更改列的名称
- node-red - 如何在 mosquitto 中更改自动生成的 ID?
- android - rabbitmq 连接被拒绝
- ios - 如何在 Swift 中让多个 ViewController 上的多个“菜单”按钮导航到同一个 VC?
- flutter - POST请求后如何使用响应?
- forms - 在 VueJS 中,如何允许在特定时间长度内输入表单
- c# - 如何向 CRM WebAPI 中的实体添加方列表字段?