Сложность NSTimer Swift

Я пытаюсь создать NSTimer, чтобы я мог перемещать UIImageView вниз, но NSTImer испытывает трудности, говоря сначала об этом.

var timer = NSTimer.scheduledTimerWithTimeInterval(0.5, target:self(), selector: Selector ("mrockdown"), userInfo: nil, repeats: true)

отсутствует аргумент для параметра # 1 при вызове. Но когда я удаляю скобки из target:self() это говорит мне

Невозможно вызвать "scheduleTimerWIthTimerInterval" с помощью списка аргументов типа "(Double, target: ViewController ->() → ViewController, селектор: Selector, userinfo: nil, повторяет Bool.

Что мне делать?

+1
источник поделиться
2 ответа

Проблема связана с тем, где вы это говорите. Похоже, вы пытаетесь сказать это как часть объявления свойства:

class ViewController {
    var timer = ...
    // ...
}

Но вы не можете этого сделать, потому что не существует self в отношении хранимого имущества. Вам нужно объявить таймер как необязательный, а затем инициализировать его позже:

class ViewController {
    var timer = NSTimer!
    func someMethod {
        timer = ...
    }
}

Затем вы удалите круглые скобки (они ошибочны), и все будет скомпилировано просто отлично.

+1
источник

Вы можете сделать это внутри функции, где вы хотите запустить таймер (т.е. viewDidLoad или какой-то IBAction)

 _ = Timer.scheduledTimer(timeInterval: yourInterval, target: self, selector: #selector(yourFunction), userInfo: nil, repeats: true)

При этом, чтобы оживить представление, вы должны использовать это вместо этого:

UIView.animate(withDuration: yourDuration) {
    // set yourView final position here
}
0
источник

Посмотрите другие вопросы по меткам или Задайте вопрос