Swift for iOS - 2 个 for 循环同时运行?

标签 swift multithreading

我有两个对象,我需要同时更新它们的 UI。我有一个 for 循环,然后是另一个 for 循环。 for 循环中的每次迭代我都有一个短暂的延迟,因此我正在对对象中的元素进行 UI 更改......一个接一个 - 似乎不是一次。

func update(value: Int){
    var delay: Double = 0.05
    // first loop
    for i in 0...value {
        delayWithSeconds(delay) {
            //do something with object 1
        }
        delay = delay + 0.05
     }

     var delay2: Double = 0.05
     // second loop
     for i in 0...value {
        delayWithSeconds(delay2) {
            //do something with object 2
        }
        delay2 = delay2 + 0.05
    }
}

// Utility
func delayWithSeconds(_ seconds: Double, completion: @escaping () -> ()) {
    DispatchQueue.main.asyncAfter(deadline: .now() + seconds) {
        completion()
    }
}

我尝试用 DispatchQueue.main.async 包装每个 for 循环,但没有任何区别。简而言之 - 我想同时运行两个 for 循环(或被认为是这样)。这些在 UI 线程上。

最佳答案

我试过了,效果不错。它完全符合我的要求(至少在视觉上它们似乎同时运行)。

let concurrentQueue = DispatchQueue(label: "net.ericd.hello", attributes: .concurrent)
concurrentQueue.async {
    //my loop with delay here for object 1.
}
concurrentQueue.async {
    //my separate loop with delay here for object 2.
}

关于Swift for iOS - 2 个 for 循环同时运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54134911/

相关文章:

swift - 计算直线和 x 轴之间的角度

python - 子进程不会死

java - 如何实现单个函数以在 AsyncTask 之后返回数据,或者如果之前已缓存则同步返回数据?

ios - Swift - 广告只是应用程序上的一个白条

swift - 如何检查一个函数是否总是返回一个值(也就是 "doesn' t fall off the end”)?

java - 没有引用的 new Thread() 什么时候会被垃圾回收

java - 如何向线程传递参数并获取返回值?

multithreading - 英特尔和AMD使用哪种缓存一致性协议(protocol)?

Swift SpriteKit 使用 Sprite 纹理中的 SKPhysicsBody 在 SKSpriteNode 上检测 TouchesBegan

swift - 向 ColorSprites 添加点击功能