gpt4 book ai didi

swift - 尝试在一次调用中从 Web 服务获取所有数据

转载 作者:行者123 更新时间:2023-11-30 12:44:08 25 4
gpt4 key购买 nike

我有一个 Material 网络服务,我正在尝试从该服务中获取我的所有 Material 。每个 ws 响应都会给我带来一个包含 20 个寄存器的 JSON,并具有一个“下一个”属性,指示下一个要使用的 url。我将请求放在“while” block 上,但它不起作用。

我尝试使用信号量(第一次使用)来解决 while block 的问题,但我的应用程序在到达那里时卡住了。

如何获取本案例中的所有 Material ?

逻辑很简单:

while all materials i'nst fetched yet:
bring more 20 materials;
Update the screen;

编辑:

WebApi.sharedInstance.fetchDataFromWS() 是对 Alamofire.request() 的调用

  func loadMaterials() {
WebApi.sharedInstance.fetchDataFromWS(webservice: .materials, codeToFilterRequest: nil, completion: {
(json) in

for item in json["results"] {
Materials.materials.append(Material.deserializeJson(json: item.1))
}
self.collectionView.reloadData()

let semaphore = DispatchSemaphore(value: 0)
while (json["next"].string != "") {
WebApi.sharedInstance.fetchDataFromWS(url: json["next"].string!, completion: {
(json) in

for item in json["results"] {
Materials.materials.append(Material.deserializeJson(json: item.1))
}
self.collectionView.reloadData()
(semaphore).signal()
})
(semaphore).wait(timeout: DispatchTime.distantFuture)
}
})
}

最佳答案

func loadMaterials(url: String) {

webApi.sharedInstance.fetchDataFromWS(webservice: .materials, codeToFilterRequest: nil, completion: {(json) in

for item in json["results"] {
Materials.materials.append(Material.deserializeJson(json: item.1))
}

self.collectionView.reloadData()
self.loadMaterials(url: json["next"].string)
}
}

关于swift - 尝试在一次调用中从 Web 服务获取所有数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41859327/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com