Ios 我如何在Swift中表达我对这个闭包相关代码的意思?
我的第一步是JavaScript中的一个代码示例,它看起来应该可以工作,但仔细观察,它有不同的行为。我的Swift代码目前有:Ios 我如何在Swift中表达我对这个闭包相关代码的意思?,ios,swift,asynchronous,closures,Ios,Swift,Asynchronous,Closures,我的第一步是JavaScript中的一个代码示例,它看起来应该可以工作,但仔细观察,它有不同的行为。我的Swift代码目前有: for(变量索引=0;索引Void in{ if(var json=json(data:data)){ presentLocation[“days”][formattedDate][“sunrise”]=解析器(json[“results”][“sunrise”]); presentLocation[“days”][formattedDate][“sunset”]=解析
for(变量索引=0;索引Void in{
if(var json=json(data:data)){
presentLocation[“days”][formattedDate][“sunrise”]=解析器(json[“results”][“sunrise”]);
presentLocation[“days”][formattedDate][“sunset”]=解析器(json[“results”][“sunset”]);
}
}
}
}
现在,我希望代码不会像预期的那样工作。我希望完成的是,对于列表的每个formattedDate值,都会进行异步调用以从URL检索数据,并且每个API调用都将使用formattedDate
值,该值在loadDataFromURL()时处于活动状态
调用已完成。我预计循环将快速运行,生成几个异步请求,formattedDate
将使用定义的最后一个值可用。我可能不知道如何在Swift中正确执行此操作,因为API返回的数据会给出多个时间戳,但我希望了解通过回调函数查看调用其loadDataFromURL()
函数时处于活动状态的版本来遍历formattedDate
的多个值的首选方法
我也可以从完全展开(四个元素)中得到我想要的结果循环并为每个基于闭包的API调用使用单独的变量名,但我真的希望知道处理此类问题的正确方法。每次通过
for
循环都会创建一个新的formattedDate
变量,该变量独立于在任何其他过程中创建的formattedDate
变量
因此,您的循环应该按照您的意图进行
游乐场演示:
import XCPlayground
import UIKit
var blocks: [()->Void] = []
for i in 0..<5 {
var s = "\(i)"
blocks.append( { print(s) } )
}
print("calling blocks")
for block in blocks {
block()
}
import XCPlayground
import UIKit
var blocks: [()->Void] = []
for i in 0..<5 {
var s = "\(i)"
blocks.append( { print(s) } )
}
print("calling blocks")
for block in blocks {
block()
}
calling blocks
0
1
2
3
4