We wcześniejszych wersjach Swift można było utworzyć opóźnienie za pomocą następującego kodu:
let time = dispatch_time(dispatch_time_t(DISPATCH_TIME_NOW), 4 * Int64(NSEC_PER_SEC))
dispatch_after(time, dispatch_get_main_queue()) {
//put your code which should be executed with a delay here
}
Ale teraz, w Swift 3, Xcode automatycznie zmienia 6 różnych rzeczy, ale pojawia się następujący błąd: „Nie można przekonwertować DispatchTime.now
na wartość oczekiwaną dispatch_time_t
aka UInt64
”.
Jak stworzyć opóźnienie przed uruchomieniem sekwencji kodu w Swift 3?
DispatchQueue.main.asyncAfter(deadline: when)
Lubię notację jednowierszową dla GCD, jest bardziej elegancka:
Ponadto w iOS 10 mamy nowe metody Timera, np. Inicjalizator bloku:
(więc opóźnione działanie może zostać anulowane)
Przy okazji, pamiętaj: domyślnie zegar jest dodawany do domyślnego trybu pętli uruchamiania. Oznacza to, że stoper może zostać zawieszony, gdy użytkownik wchodzi w interakcję z interfejsem użytkownika aplikacji (na przykład podczas przewijania UIScrollView). Możesz rozwiązać ten problem, dodając stoper do określonego trybu pętli uruchamiania:
W tym poście na blogu znajdziesz więcej szczegółów.
źródło
Wypróbuj następującą funkcję zaimplementowaną w Swift 3.0 i nowszych wersjach
Stosowanie
źródło
Wypróbuj poniższy kod dla opóźnienia
źródło
Jednym ze sposobów jest użycie
DispatchQueue.main.asyncAfter
ponieważ wiele osób odpowiedziało.Innym sposobem jest użycie
perform(_:with:afterDelay:)
. Więcej informacji tutajźródło
// Uruchamia funkcję po x sekundach
//Posługiwać się:-
źródło