如何快速延迟循环迭代

时间:2018-07-03 07:58:14

标签: ios swift time delayed-execution timedelay

我已经为函数编写了以下代码,但是延迟后我无法执行迭代。 我想要有延迟的迭代,例如,当循环完成执行直到i = 2之后,当i == 3时,这应该在延迟之后执行。 请指导我解决这个问题。

func allCellsAttempted() -> Bool {

    var allCellsAttempted = true

    var count = 0
    if !oldVersionTriggered {
        count = micSources.count
    }
    else {
        count = olderVersionMicSources.count
    }

    print("Total Mics : \(count)")

    for i in 0..<count {


        if let cell = micTestFaliureTableView.cellForRow(at: IndexPath(row: i, section: 0)) as? MicFaliureTableViewCell {

            if !cell.micFaliureTestview.attempted {
                allCellsAttempted = false
                break
            }

        }
    }

    return allCellsAttempted
}

2 个答案:

答案 0 :(得分:1)

您可以使用计时器。您需要将完成处理程序闭包传递给函数以访问结果。

我还建议您从基础数据模型而不是从表视图单元格访问信息。

func allCellsAttempted(_ completion: @escaping(_ attempted: Bool)-> Void) -> Void {

    var allCellsAttempted = true

    var count = 0
    var target: Int

    if !oldVersionTriggered {
        target = micSources.count
    }
    else {
        target = olderVersionMicSources.count
    }

    print("Total Mics : \(target)")

    let _ = Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true) { [weak self] (timer) in
        guard let strongSelf = self else {
            timer.invalidate()
            return
        }
        if let cell = strongSelf.micTestFaliureTableView.cellForRow(at: IndexPath(row: count, section: 0)) as? MicFaliureTableViewCell {
            if !cell.micFaliureTestview.attempted {
                allCellsAttempted = false
            }
        }
        count += 1
        if count == target || !allCellsAttempted {
            timer.invalidate()
            completion(allCellsAttempted)
        }
    }

}

答案 1 :(得分:0)

尝试使用

DispatchQueue.main.asyncAfter(最后期限:.now()+ 2.0,执行:{})