Swift中数据任务的嵌套



我目前正在为即将到来的实习学习Swift,我希望得到一些关于嵌套数据任务的反馈。在这里,我试图获取一个JSON,其中包含图像的url,然后从url中获取图像。这个解决方案可以接受吗?

感谢您的反馈

func fetchImageOfTheDay() {
guard let url = URL(string: "(pictureOfTheDayUrl)?api_key=(api_key)") else {
fatalError()
}

URLSession.shared.dataTask(with: url) { data, response, error in
guard let data = data else {
return
}
let decoder = JSONDecoder()
guard let imageText = try? decoder.decode(ImageOfTheDay.self, from: data) else {
fatalError()
}
guard let imageUrl = URL(string: imageText.url) else {
fatalError()
}

URLSession.shared.dataTask(with: imageUrl) { data, response, error in
guard let data = data else {
return
}
guard let image = UIImage(data: data) else {
fatalError()
}
DispatchQueue.main.async {
self.imageOfTheDay = image
self.imageText = imageText
}

}.resume()
}.resume()


} 

从架构上来说,它本可以更好,您肯定应该考虑:

  • 将其分解为两种不同的方法
  • 进一步将代码分离为单独的类,构建相互依赖的服务层次结构
  • 将数据任务结果的使用与检索分离
  • 改进错误处理,保留失败原因

但除此之外,是的,在另一个dataTask的完成处理程序中创建并恢复dataTask是可以的。

最新更新