JSON解析-没有URL会话任务恢复的替代方法是啥,因为它不是主线程的一部分?
Posted
技术标签:
【中文标题】JSON解析-没有URL会话任务恢复的替代方法是啥,因为它不是主线程的一部分?【英文标题】:JSON Parsing - What are the alternate ways without URL Session task resume as it is not part of the main thread?JSON解析-没有URL会话任务恢复的替代方法是什么,因为它不是主线程的一部分? 【发布时间】:2018-11-15 11:38:31 【问题描述】:我是Swift
的新手。对于 JSON
从 API 解析,我找到了以下代码。
guard let url = URL(string: "url path here") else return
let task = URLSession.shared.dataTask(with: url)
(data, response, error) in
guard let dataResponse = data,
error == nil else
print(error?.localizedDescription ?? "Response Error")
return
do
//json response will be received here
let jsonResponse = try JSONSerialization.jsonObject(with: dataResponse, options: []) as! [String : Any]
print(jsonResponse)
catch let parsingError
print("Error", parsingError)
task.resume()
为什么我们需要使用task.resume()
。没有上述代码,有没有其他方法可以获得JSON
响应。
【问题讨论】:
因为默认不启动任务。这就是为什么你需要做一个resume()
。你不喜欢什么?
resume 只是 Apple 使用的命名约定。我知道它令人困惑,理想情况下应该开始。但既然苹果喜欢它。没有两种方法:)
task.resume()
还恢复暂停的任务,由于任务最初处于暂停状态,我认为 resume 是一个合适的方法名称。
从任何 Web 服务器获取任何数据是一项耗时的任务。主线程不应该做任何需要时间才能完成的任务。相反,您将耗时的任务转移到其他线程,拥有一个通知器(您的任务已完成,如回调)并在主线程中进行最后的接触(如更新 UI)。
【参考方案1】:
为什么我们需要使用task.resume()? -
新初始化的任务以挂起状态开始,因此您需要 调用此方法启动任务。
来源 - https://developer.apple.com/documentation/foundation/urlsessiontask/1411121-resume
有没有其他方法可以在没有上述代码的情况下获取 jsonResponse? -
这是从 api 获取响应的基本代码,即使您使用任何第三方,它们在内部使用相同的 URLSession。
【讨论】:
如果视图出现时需要填充json响应怎么办,因为这里的json响应是在视图出现之后来的 @BernyRayen 如果从 api 收到响应,则必须在响应后刷新/设置视图,在此之前您可以显示获取响应或类似的东西以上是关于JSON解析-没有URL会话任务恢复的替代方法是啥,因为它不是主线程的一部分?的主要内容,如果未能解决你的问题,请参考以下文章