我有一个必须每半秒执行一次的代码,而我正在使用Xcode游乐场。我使用了这个top answer并得到了这样的代码:
for (index, item) in array.enumerated() {
DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(index), execute: {
print("\(index) - \(df.string(from: Date()))"
//play sound every second
})
}
这段代码每秒执行一次(我知道我必须将它除以2才能得到半秒但想看结果)。我使用DateFormatter
来计算时间,因为我无法弄清楚为什么声音不能均匀播放。
let df = DateFormatter()
df.dateFormat = "ss.SSSS"
结果是它不会每1秒触发一次。
0 - 17.4800
1 - 18.5770 // even though it's not called exactly after 1s it's acceptable
2 - 19.6750
3 - 20.7770
4 - 21.8780
5 - 22.9760
6 - 24.0710
7 - 25.1690
8 - 26.2720
9 - 27.3640
10 - 28.4760
11 - 28.7580 //0.3s of difference
12 - 30.4800
13 - 30.5060 // 0.1s of difference
14 - 32.4800
15 - 32.5030 // less than 0.1s of difference
答案 0 :(得分:0)
这里你异步执行你的Print
语句,这样你就不会在半秒(或一秒钟)后得到你的打印数据。如果你同步执行它,那么你得到的打印数据间隔为1秒。要知道更多关于调度队列跟随this链接。如果您有任何问题,请告诉我。