2015-01-16 11 views
28

में देरी कैसे करें मुझे किसी गेम में कंप्यूटर के चलने में देरी होने में समस्या है।एनएसटीमर - स्विफ्ट

मुझे कुछ समाधान मिल गए हैं लेकिन वे मेरे मामले में काम नहीं करते हैं, उदा।

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

मैं समारोह fire साथ लेकिन यह भी कोई प्रभाव के लिए इसका उपयोग करने की कोशिश की।

अन्य संभावनाएं क्या हैं?

+2

आप स्पष्ट रूप से नहीं समझते कि एनएसटीमर क्या करता है। आपको चयनकर्ता होने की आवश्यकता है, और उस विधि में कुछ कोड है जिसे आप टाइमर आग लगाना चाहते हैं। एक चयनकर्ता के बिना एक टाइमर कुछ भी नहीं करता है। – rdelmar

+0

यह उत्तर आप जो देख रहे हैं वह http://stackoverflow.com/a/24318861/3810673 – Ian

+0

आपको बहुत बहुत धन्यवाद! मैं चयनकर्ता को समझ में नहीं आया क्योंकि मुझे यह नहीं मिला कि यह एस्ट्रोफ़े में क्यों होना चाहिए। मैंने वहां अपना func और eveything महान काम किया। – Dandy

उत्तर

92

स्विफ्ट 3

GCD के साथ:

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) 
    } 
संबंधित मुद्दे