Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 我如何在Swift中表达我对这个闭包相关代码的意思?_Ios_Swift_Asynchronous_Closures - Fatal编程技术网

Ios 我如何在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”]=解析

我的第一步是JavaScript中的一个代码示例,它看起来应该可以工作,但仔细观察,它有不同的行为。我的Swift代码目前有:

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