我目前正在为即将到来的实习学习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是可以的。