gpt4 book ai didi

ios - 打破 for 循环以快速调用同步 Web 服务

转载 作者:行者123 更新时间:2023-11-28 21:25:28 25 4
gpt4 key购买 nike

我想停止在循环中调用网络服务,一旦它在任何阶段都处于失败状态。

我已尝试使用以下代码,但似乎所有网络服务调用都会排队,然后再调用。如果任何 Web 服务调用返回失败,我想立即中断循环。

//Call web services in loop
for Prop: Property in self.properties!
{
self.netUtil.callPostWebservice(unitUrl) {(dataDictionary) -> Void in
let status = dataDictionary[self.constants!.defaultsKeys.RESPONSE_STATUS]
if(status!.isEmpty || status==“FAIL”){
break
}
}
}

//Web service common function
func callPostWebservice(urlStr: String, callback: ((data: Dictionary<String,String>) -> Void)!)
{
let semaphore = dispatch_semaphore_create(0)
let request = NSMutableURLRequest(URL: NSURL(string: urlStr)!)
request.HTTPMethod = "POST"
request.addValue("application/xml", forHTTPHeaderField: "Content-Type")
request.addValue("application/xml", forHTTPHeaderField: "Accept")
request.timeoutInterval = 20000.0

var dict = Dictionary<String,String>()
let task = NSURLSession.sharedSession().dataTaskWithRequest(request, completionHandler: {data, response, error -> Void in
dispatch_semaphore_signal(semaphore)

if error == nil{
if data == nil{
dict[self.constants.defaultsKeys.RESPONSE_STATUS] = self.constants.defaultsKeys.RESPONSE_FAIL
callback(data: dict)
}
else{

dict[self.constants.defaultsKeys.RESPONSE_STATUS] = self.constants.defaultsKeys.RESPONSE_SUCCESS
callback(data: dict)

}
}
else{dict[self.constants.defaultsKeys.RESPONSE_STATUS] = self.constants.defaultsKeys.RESPONSE_FAIL
callback(data: dict)
}

})
task.resume()

}

最佳答案

发生这种情况是因为 API 行为是 async 并且您的 for 循环以 sync 方式工作。要解决您的问题,您可以尝试这样的方法。

func getData() {
if (cnt < self.properties.count) {
let prop: Property = self.properties[cnt]
self.netUtil.callPostWebservice(unitUrl) {(dataDictionary) -> Void in
let status = dataDictionary[self.constants!.defaultsKeys.RESPONSE_STATUS]
if(status.isEmpty || status!=“FAIL”){
{
cnt++
self.getData()
}
}
}
}

现在在 cnt 上创建 Int 类型的 var 并像这样调用这个方法

cnt = 0
self.getData()

关于ios - 打破 for 循环以快速调用同步 Web 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38321895/

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