В Swift 3 синтаксис GCD изменился совсем немного.Как DispatchQueue.main.asyncAfter (крайний срок: .now() + 5.0) работает в Swift 3?
Вызов dispatch_after() теперь выглядит следующим образом:
DispatchQueue.main.asyncAfter(deadline: .now() + 5.0) {//do something}
Этот код будет ссылаться на блок 5 секунд после того, как он называется.
Как это работает? Документы говорят, что параметр крайнего срока - это dispatch_time_t
, который является типом для UInt64. Я предполагаю, что это время в наносекундах. Однако синтаксис .now() + delay
добавляет десятичные секунды к значению. Не DispatchTime.now() возвращает UInt64? Если это так, добавление десятичных секунд к этому не должно работать. Во всяком случае, я ожидаю, что добавленная стоимость добавится к .now()
, которая будет рассматриваться как наносекунды, что было бы не очень полезно.
(В быстром 2 вы использовали, чтобы умножить значение на константу для числа наносекунд в секунду.)
Если вы нажмете команду '+' в Xcode, вы увидите объявление. –
@MartinR, спасибо за предложение. Для этого мне приходилось сталкиваться с тем, что это было переопределение оператора '+', который это делал. –
Мне кажется, что нам нужна форма этого вызова, которая принимает значение задержки, а не время относительно текущего времени Маха, поскольку это, скорее всего, наиболее распространенная форма, используемая разработчиками приложений. Это было бы довольно простое расширение, но оно должно быть встроено. –