首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >这是我和斯威夫特一起创造的比赛条件吗?

这是我和斯威夫特一起创造的比赛条件吗?
EN

Stack Overflow用户
提问于 2022-09-11 14:43:44
回答 1查看 41关注 0票数 0

我有一个简单的SwiftUI示例,它在每次计时器触发时将一个块移动到屏幕上的X像素上;我完整地写出了代码。

在这里发出的数字可以认为是零;vertiSide + horizSide只是参考编号。

现在可以了,但是我想在循环中执行它。

代码语言:javascript
复制
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
        }
    }
}

所以我写了这段代码,这和我想的一样

代码语言:javascript
复制
            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数组的输出。

代码语言:javascript
复制
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版,我得到了这个输出

代码语言:javascript
复制
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

至于我的生命,我看不出有什么不同?我遗漏了什么??

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-11 15:00:47

信号量是干什么用的?代码中没有异步线程。

只管写

代码语言:javascript
复制
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
            }
        }
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73680184

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档