【发布时间】:2020-06-18 00:11:46
【问题描述】:
我正在尝试从学校课程目录网站下载数据。我在变量 UrlBook 中有 64 个 Url。我已经成功编写了代码来下载一系列课程,并使用完成处理程序方法将它们从单个 url 转换为单个 subject 对象。我真的不知道我应该如何实现从 64 个 url 收集所有主题并最终将它们变成 catalog 对象(它包含主题对象列表)。
我已经阅读了很多关于异步和同步处理的文章和帖子,这让我很困惑。我非常感谢简单直接的代码来帮助我解决这个问题。谢谢各位!
let urlBook = getUrlFromBook()
func fetchClassInfo(url:URL,completion: @escaping ([clase])-> Void){
let task = URLSession.shared.dataTask(with: url){(data, response, error) in
let jsonDecoder = JSONDecoder()
if let data = data,
let collection:[clase] = try? jsonDecoder.decode([clase].self, from: data){
completion(collection)
}else{
print("Either no data was returned, or data was not properly decoded.")
//completion(nil)
}
}
task.resume()
}
fetchClassInfo(url:urlBook.book[0]){(clase) in
let newSubject = makeNewSubject(subjectIndex: 0, collectionOfCourse: clase)
var masterCatalog = catalog(subjectCollection: [])
masterCatalog.addSubject(newSubject: newSubject)
}
【问题讨论】:
-
所以让我说得对,你有一堆 url,你想向所有这些 url 发出多个请求?
-
您还希望网络请求一个接一个地并发(即所有在不同线程中并行)或串行方式?
-
是的,我收集了它们,我尝试访问所有它们,然后将所有数据打包到我的应用程序的一个巨大对象(称为目录)中。对于它是否应该是没有偏好并发与否。我只是对使用闭包和完成处理程序感到沮丧。我的第一次尝试是将 fetchClassInfo 闭包包装到一个 for 循环中以发出所有这些网络请求,但结果它失败了。
-
我希望获得一些关于如何访问多个网络并将返回的对象(主题)添加到列表中的清晰结构和见解,然后创建一个名为 catalog 的新对象,其中包含一个字段“var subjectCollection :[主题]"
标签: swift completionhandler urlsession