eu tentei
var timer = NSTimer()
timer(timeInterval: 0.01, target: self, selector: update, userInfo: nil, repeats: false)
Mas, recebi um erro dizendo
'(timeInterval: $T1, target: ViewController, selector: () -> (), userInfo: NilType, repeats: Bool) -> $T6' is not identical to 'NSTimer'
ios
nstimer
nstimeinterval
swift
user3225917
fonte
fonte
Respostas:
Isso funcionará:
Para o Swift 4, o método do qual você deseja obter o seletor deve ser exposto ao Objective-C, portanto, o
@objc
atributo deve ser adicionado à declaração do método.fonte
Evento repetido
Você pode usar um cronômetro para executar uma ação várias vezes, como visto no exemplo a seguir. O timer chama um método para atualizar um rótulo a cada meio segundo.
Aqui está o código para isso:
Evento atrasado
Você também pode usar um cronômetro para agendar um evento único por algum tempo no futuro. A principal diferença do exemplo acima é que você usa em
repeats: false
vez detrue
.O exemplo acima chama um método chamado
delayedAction
dois segundos após o timer ser definido. Não é repetido, mas você ainda pode ligartimer.invalidate()
se precisar cancelar o evento antes que ele aconteça.Notas
Relacionado
fonte
Atualizado para o Swift 4, aproveitando as informações do usuário:
fonte
NSTimer
objetoNo iOS 10, também existe um novo método de fábrica do Timer baseado em blocos, mais limpo que o seletor:
fonte
_ =
e começarTimer
?Swift 3, pré iOS 10
Swift 3, iOS 10 ou superior
Notas
@objc
fonte
timeInterval
Verificar com:
Swift 2
Swift 3, 4, 5
fonte
self
ser? UIView está ok?Você precisará usar o Timer em vez do NSTimer no Swift 3.
Aqui está um exemplo:
fonte
Swift 5
Pessoalmente, prefiro o Timer com o fechamento do bloco:
fonte
para swift 3 e Xcode 8.2 (é bom ter blocos, mas se você compilar para iOS9 E desejar informações do usuário):
...
fonte
SimpleTimer (Swift 3.1)
Por quê?
Esta é uma classe simples de timer no swift que permite:
Uso:
Código:
fonte
E criar diversão com o nome createEnemy
fonte
Primeiro declare seu cronômetro
Em seguida, adicione linha em viewDidLoad () ou em qualquer função que você deseja iniciar o timer
Esta é a função que você retornará para fazer algo que deve ser @objc
fonte
No Swift 3, algo assim com @objc:
fonte
Se você iniciar o método do temporizador
adicione-o ao loop usando o método outro seletor não será chamado
NOTA: Se você deseja que isso repita, faça repetições verdadeiras e mantenha a referência do temporizador, caso contrário, o método de atualização não será chamado.
Se você estiver usando este método.
mantenha uma referência para uso posterior se a repetição for verdadeira.
fonte
Eu tentei fazer em uma classe NSObject e isso funcionou para mim:
fonte
O NSTimer foi renomeado para Timer no Swift 4.2. esta sintaxe funcionará no 4.2:
fonte