Я попытался
var timer = NSTimer()
timer(timeInterval: 0.01, target: self, selector: update, userInfo: nil, repeats: false)
Но я получил ошибку, сказав
'(timeInterval: $T1, target: ViewController, selector: () -> (), userInfo: NilType, repeats: Bool) -> $T6' is not identical to 'NSTimer'
ios
nstimer
nstimeinterval
swift
user3225917
источник
источник
Ответы:
Это будет работать:
Для Swift 4 метод, для которого вы хотите получить селектор, должен быть доступен Objective-C, поэтому
@objc
атрибут должен быть добавлен в объявление метода.источник
Повторное событие
Вы можете использовать таймер для выполнения действия несколько раз, как показано в следующем примере. Таймер вызывает метод для обновления метки каждые полсекунды.
Вот код для этого:
Задержка события
Вы также можете использовать таймер, чтобы запланировать одноразовое событие на какое-то время в будущем. Основное отличие от приведенного выше примера заключается в том, что вы используете
repeats: false
вместоtrue
.В приведенном выше примере вызывается метод с именем
delayedAction
две секунды после установки таймера. Это не повторяется, но вы все равно можете позвонитьtimer.invalidate()
если вам нужно отменить событие до того, как оно произойдет.Ноты
Связанный
источник
Обновлен до Swift 4, используя userInfo:
источник
NSTimer
объектНачиная с iOS 10, также существует новый метод фабрики Timer на основе блоков, который чище, чем использование селектора:
источник
_ =
и начать с самого началаTimer
?Swift 3, предварительно iOS 10
Swift 3, iOS 10+
Ноты
@objc
источник
timeInterval
Проверить с:
Swift 2
Свифт 3, 4, 5
источник
self
быть? UIView в порядке?Вам нужно будет использовать Timer вместо NSTimer в Swift 3.
Вот пример:
источник
Swift 5
Я лично предпочитаю Таймер с закрытием блока:
источник
для swift 3 и Xcode 8.2 (приятно иметь блоки, но если вы компилируете для iOS9 и хотите userInfo):
...
источник
SimpleTimer (Swift 3.1)
Зачем?
Это простой класс таймера в swift, который позволяет вам:
Использование:
Код:
источник
И Создай Забаву По Названию createEnemy
источник
Сначала объявите свой таймер
Затем добавьте строку в viewDidLoad () или в любую функцию, которую вы хотите запустить таймер
Это функция, которую вы перезвоните, чтобы сделать что-то, что должно быть @objc
источник
В Swift 3 что-то вроде этого с @objc:
источник
Если вы инициируете метод таймера
затем добавьте его в цикл с помощью метода, который не будет вызываться другим селектором
ПРИМЕЧАНИЕ. Если вы хотите, чтобы это повторялось, сделайте true для повторов и сохраните ссылку на таймер, иначе метод обновления не будет вызван.
Если вы используете этот метод.
сохраните ссылку для последующего использования, если повторы верны.
источник
Я пытался сделать в классе NSObject, и это сработало для меня:
источник
NSTimer был переименован в Timer в Swift 4.2. этот синтаксис будет работать в 4.2:
источник