как отложить итерации цикла в Swift

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

person Umair Ahmad    schedule 03.07.2018    source источник
comment
Почему бы не использовать таймер вместо цикла for?   -  person Paulw11    schedule 03.07.2018
comment
я хочу повторить счет.. пожалуйста, скажите мне, как сделать с таймером   -  person Umair Ahmad    schedule 03.07.2018
comment
Держите счет в собственности. Каждый раз, когда таймер срабатывает, обрабатывайте следующий элемент и увеличивайте счетчик. Когда вы дойдете до конца, аннулируйте таймер.   -  person Paulw11    schedule 03.07.2018
comment
пожалуйста, напишите пример, используя мой код   -  person Umair Ahmad    schedule 03.07.2018
comment
где вы называете свою функцию allCellsAttempted() -> Bool   -  person zero3nna    schedule 03.07.2018
comment
я вызываю эту функцию в другой функции, например, в allCellsSuccess()   -  person Umair Ahmad    schedule 03.07.2018


Ответы (2)


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

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

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

}
person Paulw11    schedule 03.07.2018

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

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

person Syed faizan ali    schedule 03.07.2018