Di versi Swift sebelumnya, seseorang dapat membuat penundaan dengan kode berikut:
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
}
Tetapi sekarang, di Swift 3, Xcode secara otomatis mengubah 6 hal berbeda tetapi kemudian muncul kesalahan berikut: "Tidak dapat mengonversi DispatchTime.now
ke nilai yang diharapkan dispatch_time_t
alias UInt64
."
Bagaimana cara membuat penundaan sebelum menjalankan urutan kode di Swift 3?
DispatchQueue.main.asyncAfter(deadline: when)
Saya suka notasi satu baris untuk GCD, lebih elegan:
Juga, di iOS 10 kami memiliki metode Timer baru, mis. Blok inisialisasi:
(jadi tindakan yang tertunda dapat dibatalkan)
Btw, perlu diingat: secara default, timer ditambahkan ke mode run loop default. Ini berarti timer dapat dibekukan ketika pengguna berinteraksi dengan UI aplikasi Anda (misalnya, ketika menggulir UIScrollView) Anda dapat menyelesaikan masalah ini dengan menambahkan timer ke mode run loop spesifik:
Di posting blog ini Anda dapat menemukan lebih banyak detail.
sumber
Coba fungsi berikut diimplementasikan dalam Swift 3.0 dan di atas
Pemakaian
sumber
Coba kode di bawah ini untuk menunda
sumber
Salah satu caranya adalah menggunakan
DispatchQueue.main.asyncAfter
karena banyak orang telah menjawab.Cara lain adalah menggunakan
perform(_:with:afterDelay:)
. Lebih detail di sinisumber
// Menjalankan fungsi setelah x detik
//Menggunakan:-
sumber