ios - swift 5 ios:如何从 session.dataTask 完成处理程序中获取数据
问题描述
我有下面的代码,它不完整,例如。
func getUserData() {
var user: UserData // creates an empty userdata object
// setup for session.dataTask below, skipping since this isn’t my question
let task = session.dataTask(with: url) {(data, response, error) in
…
// process data here
let json = JSONSERializable.jsonobject…
// How can I get the json variable out into the function?
// Because I can do something like:
let id = json[“id”] as? String ?? “”
let name = json[“name”] as? String ?? “”
// And I would want to do something like:
userdata.id = id
userData.name = name
}
task.resume()
}
但上面的用户数据。陈述是错误的,我似乎无法理解这个概念。
我有一个应用程序,它向一个 restful api 发出大量请求,我得到了 json 数据有效负载以在应用程序中使用。所以我有很多这些类型的数据调用,并且想创建一个方法类来访问远程数据库的各个方面。
任何帮助将不胜感激。
解决方案
这段代码对我有用:
func loadJson(fromURLString urlString: String,
completion: @escaping (Result<Data, Error>) -> Void) {
if let url = URL(string: urlString) {
let urlSession = URLSession(configuration: .default).dataTask(with: url) { (data, response, error) in
if let error = error {
completion(.failure(error))
}
if let data = data {
completion(.success(data))
}
}
urlSession.resume()
}
}
并使用:
loadJson(fromURLString: urlString) { (result) in
switch result {
case .success(let data):
// Parse your Json: I call a function Parse that does it
//if let decodedJson = GetJson.parse(jsonData: data) {
//DispatchQueue.main.async {
//Use your decodedJson
//print(decodedJson.id)
//print(decodedJson.name)
//}
}
case .failure(let error):
print(error)
}
}
推荐阅读
- react-native - 如何在博览会性能屏幕中知道应用程序性能是否良好?
- flutter - 未处理的异常:NoSuchMethodError:方法'showNotificationDaily'在flutter中被调用为null
- android - Android:发送 Whatsapp 消息
- python - 如何将条件传递给游标中的 PostgreSQL 查询
- sql - 当数据为 VARCHAR 时如何在 SQL 中查询数字?
- android - 如何使 aar 成为库中的默认工件
- c# - 从列表中的 db 获取值
- python - 如何在每个具有唯一键的多个节点之间划分 Spark Dataframe
- node.js - Socket.io 一对一聊天
- html - 如何使表格中的div居中