2015-01-16 2 views
28

У меня проблема с задержкой перемещения компьютера в игре.NSTimer - как задержать Swift

Я нашел некоторые решения, но они не работают в моем случае, например.

var delay = NSTimer.scheduledTimerWithTimeInterval(4, target: self, selector: nil, userInfo: nil, repeats: false) 

Я пытался использовать эту функцию с fire, но и без каких-либо последствий.

Какие еще существуют возможности?

+2

Вы явно не понимаете, что делает NSTimer. Вам нужно иметь селектор и иметь некоторый код в том методе, который вы хотите запустить, когда срабатывает таймер. Таймер без селектора ничего не делает. – rdelmar

+0

Этот ответ - это то, что вы ищете http://stackoverflow.com/a/24318861/3810673 – Ian

+0

большое спасибо! Я не понял селектора, потому что не понимаю, почему он должен быть в апострофе. Я положил туда свою func и eveything отлично работает. – Dandy

ответ

92

Swift 3

С НОД:

let delayInSeconds = 4.0 
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + delayInSeconds) { 

    // here code perfomed with delay 

} 

или с помощью таймера:

func myPerformeCode() { 

    // here code to perform 
} 
let myTimer : Timer = Timer.scheduledTimer(timeInterval: 4, target: self, selector: #selector(self.myPerformeCode), userInfo: nil, repeats: false) 

Свифта 2

С GCD:

let seconds = 4.0 
let delay = seconds * Double(NSEC_PER_SEC) // nanoseconds per seconds 
let dispatchTime = dispatch_time(DISPATCH_TIME_NOW, Int64(delay)) 

dispatch_after(dispatchTime, dispatch_get_main_queue(), { 

    // here code perfomed with delay 

}) 

или с помощью таймера:

func myPerformeCode(timer : NSTimer) { 

    // here code to perform 
} 
let myTimer : NSTimer = NSTimer.scheduledTimerWithTimeInterval(4, target: self, selector: Selector("myPerformeCode:"), userInfo: nil, repeats: false) 
+0

Это отличное решение без каких-либо дополнительных методов. Я не думал об использовании параметров для моего основного метода, спасибо! – Dandy

+0

Хотел поднять, только чтобы узнать, что я уже делал в прошлом :) –

2

В стрижа мы можем задержать с помощью Dispatch_after.

Свифта 3.0: -

DispatchQueue.main.asyncAfter(deadline: .now()+4.0) { 

     alert.dismiss(animated: true, completion: nil) 
    } 
Смежные вопросы