我有一个简单的SwiftUI示例,它在每次计时器触发时将一个块移动到屏幕上的X像素上;我完整地写出了代码。
在这里发出的数字可以认为是零;vertiSide + horizSide只是参考编号。
现在可以了,但是我想在循环中执行它。
fileprivate func extractedFunc() {
let t3 = "\(tileP[0 + issued].vertiSide - 32)\(tileP[0 + issued].horizSide)"
if let ok = tileD[t3] {
if !ok {
var t0 = "\(tileP[0 + issued].vertiSide)\(tileP[0 + issued].horizSide)"
tileD[t0] = false
tileP[0 + issued].vertiSide -= 32
var t1 = "\(tileP[0 + issued].vertiSide)\(tileP[0 + issued].horizSide)"
tileD[t1] = true
t0 = "\(tileP[1 + issued].vertiSide)\(tileP[1 + issued].horizSide)"
tileD[t0] = false
tileP[1 + issued].vertiSide -= 32
t1 = "\(tileP[1 + issued].vertiSide)\(tileP[1 + issued].horizSide)"
tileD[t1] = true
t0 = "\(tileP[2 + issued].vertiSide)\(tileP[2 + issued].horizSide)"
tileD[t0] = false
tileP[2 + issued].vertiSide -= 32
t1 = "\(tileP[2 + issued].vertiSide)\(tileP[2 + issued].horizSide)"
tileD[t1] = true
t0 = "\(tileP[3 + issued].vertiSide)\(tileP[3 + issued].horizSide)"
tileD[t0] = false
tileP[3 + issued].vertiSide -= 32
t1 = "\(tileP[3 + issued].vertiSide)\(tileP[3 + issued].horizSide)"
tileD[t1] = true
}
}
}所以我写了这段代码,这和我想的一样
let semaphore = DispatchSemaphore(value: 1)
DispatchQueue.global().async {
let t3 = "\(tileP[0].vertiSide - 32)\(tileP[0].horizSide)"
for i in 0..<tileP.count {
semaphore.wait()
if let ok = tileD[t3] {
if !ok {
let t0 = "\(tileP[i].vertiSide)\(tileP[i].horizSide)"
tileD[t0] = false
tileP[i].vertiSide -= 32
let t1 = "\(tileP[i].vertiSide)\(tileP[i].horizSide)"
tileD[t1] = true
}
}
semaphore.signal()
}
}但是输出是非常不同的,对于版本1,我得到了tileD数组的输出。
Optional(false) 512.00.0
Optional(false) 480.00.0
Optional(false) 448.00.0
Optional(false) 416.00.0
Optional(false) 384.00.0
Optional(false) 352.00.0
Optional(false) 320.00.0
Optional(false) 288.00.0
Optional(false) 256.00.0
Optional(false) 224.00.0
Optional(false) 192.00.0
Optional(false) 160.00.0
Optional(false) 128.00.0
Optional(true) 96.00.0
Optional(true) 64.00.0
Optional(true) 32.00.0
Optional(true) 0.00.0但是对于第2版,我得到了这个输出
Optional(true) 512.00.0
Optional(true) 480.00.0
Optional(true) 448.00.0
Optional(false) 416.00.0
Optional(false) 384.00.0
Optional(false) 352.00.0
Optional(false) 320.00.0
Optional(false) 288.00.0
Optional(false) 256.00.0
Optional(false) 224.00.0
Optional(false) 192.00.0
Optional(false) 160.00.0
Optional(false) 128.00.0
Optional(false) 96.00.0
Optional(false) 64.00.0
Optional(false) 32.00.0
Optional(true) 0.00.0至于我的生命,我看不出有什么不同?我遗漏了什么??
发布于 2022-09-11 15:00:47
信号量是干什么用的?代码中没有异步线程。
只管写
fileprivate func extractedFunc() {
let t3 = "\(tileP[0 + issued].vertiSide - 32)\(tileP[0 + issued].horizSide)"
if let ok = tileD[t3] {
if !ok {
for i in 0..<4 {
let t0 = "\(tileP[i + issued].vertiSide)\(tileP[i + issued].horizSide)"
tileD[t0] = false
tileP[i + issued].vertiSide -= 32
let t1 = "\(tileP[i + issued].vertiSide)\(tileP[i + issued].horizSide)"
tileD[t1] = true
}
}
}
}https://stackoverflow.com/questions/73680184
复制相似问题