как отложить на итерации цикла в Swift - PullRequest
0 голосов
/ 03 июля 2018

Я написал следующий код для своей функции, но мне не удалось выполнить итерации после задержки. Я хочу итерации с задержкой, например, когда цикл завершил выполнение до 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 голосов
/ 03 июля 2018

Попробуйте использовать

DispatchQueue.main.asyncAfter (крайний срок: .now () + 2.0, выполнить: {})

0 голосов
/ 03 июля 2018

Вы можете использовать таймер. Чтобы получить доступ к результату, вам нужно передать закрытие обработчика завершения функции.

Я бы также предложил вам получить доступ к информации из базовой модели данных, а не из ячеек табличного представления.

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)
        }
    }

}
...