2015-12-05 4 views
0

Хотелось бы запустить hs.robber.step() 6 раз, каждые 2 секунды. С кодом ниже он ждет 2 секунды, а затем он выполняет все 6 раз одновременно.Задержка для каждого цикла

Не могли бы вы найти для меня ошибку?

Я использовал код здесь: How to add a time delay in swift

func delay(delay:Double, closure:()->()) { 
dispatch_after(dispatch_time(DISPATCH_TIME_NOW,Int64(delay * Double(NSEC_PER_SEC))),dispatch_get_main_queue(), closure) 
} 

func displayEscape() { 
for _ in 1...6 { 

    let timeToDelay = Double(2) 

    delay(timeToDelay) { 
    self.hs.robber.step() 
    } 
} 
} 
+1

Почему вы не используете NSTimer? – sunshinejr

+1

Что вы ожидаете, если вы отправляете все блокировки с одинаковой задержкой? –

+0

Я новичок. Я думал, что это займет 1, подождите 2 секунды, выполните шаг, возьмите 2, подождите 2 секунды .... и т. Д. – swissboii

ответ

1

Обращение dispatch_time() создает определенное время в будущем, а не относительное изменение. Поместите его вычисления в цикл, как показано ниже.

func displayEscape() { 
    let delay = Int64(2.0 * Double(NSEC_PER_SEC)) 
    for step in 1...6 { 
    dispatch_after(
     dispatch_time(DISPATCH_TIME_NOW, (Int64(step) * delay)), 
     dispatch_get_main_queue(), 
     { self.hs.robber.step() }) 
    } 
} 
+0

Благодарим вас за ответ. Ошибка: Бинарный оператор '*' не может быть применен к операндам типа 'Int' и 'Int64' – swissboii

+0

Я не получил эту ошибку, но теперь сделал шаг для Int64. Пожалуйста, попробуйте еще раз. –

1

Вы устанавливаете ту же задержку для каждой итерации. Вы должны увеличивать задержку на каждой итерации, чтобы она выглядела так, как вы хотите (функция каждые 2 секунды раз 6). Что-то вроде:

func delay(delay:Double, closure:()->()) { 
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW,Int64(delay * Double(NSEC_PER_SEC))),dispatch_get_main_queue(), closure) 
} 

func displayEscape() { 
    let timeToDelay: Double = 2 
    var currentDelay: Double = 0 
    for _ in 1...6 { 
     currentDelay += timeToDelay 
     delay(currentDelay) { 
      self.hs.robber.step() 
     } 
    } 
} 
+0

как-то ничего не изменил:/ – swissboii

+0

Простая проверка - если вы замените self.s.robber.step() с помощью print («Test»), вы увидите, что это работает. Тогда это должно быть что-то с вашей функцией. – sunshinejr

Смежные вопросы