Saya mencoba
var timer = NSTimer()
timer(timeInterval: 0.01, target: self, selector: update, userInfo: nil, repeats: false)
Tapi, saya mendapat pesan kesalahan
'(timeInterval: $T1, target: ViewController, selector: () -> (), userInfo: NilType, repeats: Bool) -> $T6' is not identical to 'NSTimer'
ios
nstimer
nstimeinterval
swift
pengguna3225917
sumber
sumber
Jawaban:
Ini akan berhasil:
Untuk Swift 4, metode yang Anda inginkan untuk mendapatkan pemilih harus diekspos ke Objective-C, sehingga
@objc
atribut harus ditambahkan ke deklarasi metode.sumber
Acara berulang
Anda dapat menggunakan timer untuk melakukan suatu tindakan beberapa kali, seperti terlihat pada contoh berikut. Penghitung waktu memanggil metode untuk memperbarui label setiap setengah detik.
Ini kode untuk itu:
Acara yang tertunda
Anda juga dapat menggunakan timer untuk menjadwalkan acara satu kali untuk beberapa waktu di masa mendatang. Perbedaan utama dari contoh di atas adalah bahwa Anda menggunakan
repeats: false
bukantrue
.Contoh di atas memanggil metode yang dinamai
delayedAction
dua detik setelah timer disetel. Itu tidak diulang, tetapi Anda masih bisa menelepontimer.invalidate()
jika Anda harus membatalkan acara sebelum itu terjadi.Catatan
Terkait
sumber
Diperbarui ke Swift 4, meningkatkan userInfo:
sumber
NSTimer
objekPada iOS 10 ada juga metode Timer pabrik berbasis blok baru yang lebih bersih daripada menggunakan pemilih:
sumber
_ =
saja dan mulai sajaTimer
?Swift 3, sebelum iOS 10
Swift 3, iOS 10+
Catatan
@objc
sumber
timeInterval
Periksa dengan:
Cepat 2
Swift 3, 4, 5
sumber
self
? UIView ok?Anda harus menggunakan Timer alih-alih NSTimer di Swift 3.
Berikut ini sebuah contoh:
sumber
Cepat 5
Saya pribadi lebih suka Timer dengan penutupan blok:
sumber
untuk swift 3 dan Xcode 8.2 (senang memiliki blok, tetapi jika Anda mengkompilasi untuk iOS9 DAN ingin userInfo):
...
sumber
SimpleTimer (Swift 3.1)
Mengapa?
Ini adalah kelas pengatur waktu sederhana yang memungkinkan Anda untuk:
Pemakaian:
Kode:
sumber
Dan Ciptakan Kesenangan Dengan Nama createEnemy
sumber
Pertama, nyatakan timer Anda
Kemudian tambahkan baris di viewDidLoad () atau dalam fungsi apa pun yang Anda inginkan untuk memulai timer
Ini adalah fungsi yang Anda akan panggil balik untuk melakukan sesuatu yang pasti @objc
sumber
Dalam Swift 3 sesuatu seperti ini dengan @objc:
sumber
Jika Anda init metode timer
kemudian tambahkan ke loop menggunakan metode pemilih lain tidak akan dipanggil
CATATAN: Jika Anda ingin ini mengulangi membuat pengulangan benar dan menjaga referensi timer jika tidak metode pembaruan tidak akan dipanggil.
Jika Anda menggunakan metode ini.
simpan referensi untuk digunakan nanti jika pengulangan benar.
sumber
Saya mencoba melakukannya di Kelas NSObject dan ini berhasil bagi saya:
sumber
NSTimer telah diubah namanya menjadi Timer di Swift 4.2. sintaks ini akan bekerja di 4.2:
sumber