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

스위프트 3

:

func myPerformeCode() { 

    // here code to perform 
} 
let myTimer : Timer = Timer.scheduledTimer(timeInterval: 4, target: self, selector: #selector(self.myPerformeCode), userInfo: nil, repeats: false) 
:
let delayInSeconds = 4.0 
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + delayInSeconds) { 

    // here code perfomed with delay 

} 

또는 타이머

스위프트 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 

}) 

또는 타이머

:

우리가 Dispatch_after.

SWIFT 3.0 사용하여 지연시킬 수 신속한에서

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

내가 과거에 이미 발견 한 것을 upvote로 보내고 싶었다. :) –

2

: -

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

     alert.dismiss(animated: true, completion: nil) 
    } 
관련 문제