2014-07-13 11 views
6

मेरा ऐप NSTimer ऑब्जेक्ट के एकाधिक थ्रेड का उपयोग करता है।समय के लिए स्विफ्ट ऐप रोकें/रोकें

एक फ़ंक्शन के भीतर (यादृच्छिक रूप से यादृच्छिक रूप से कहा जाता है, निश्चित विलंब नहीं) मैं चाहता हूं कि यह पूरे ऐप को रोक दे, केवल 1 second के लिए धागे को रोक दें। मैं निम्नलिखित कोड है:

[self performSelector:@selector(subscribe) withObject:self afterDelay:3.0 ]; 

कौन सा उद्देश्य सी है, और मैं इस तरह स्विफ्ट में अनुवाद करने की कोशिश की:

self.performSelector(Selector:changeColourOfPage(), withObject: self, afterDelay: 1.0) 

लेकिन मैं त्रुटि Missing argument for parameter 'waitUntilDone' in call हो रही है और जब मैं में, डाल दिया है कि कहता है कि यह modes तर्क चाहता है लेकिन जब मैं इसे डालता हूं तो Extra argument modes कहता है।

मैं यह नहीं समझ सकता कि ऐप और उसके सभी धागे को कुछ सेकंड के लिए कैसे रोकें, और फिर सामान्य की तरह आगे बढ़ें?

कोई विचार?

उत्तर

11

प्रदर्शन चयनकर्ता स्विफ्ट में उपलब्ध नहीं हैं। आप dispatch_after का उपयोग कर देरी कार्यक्षमता प्राप्त कर सकते हैं।

let delayTime = dispatch_time(DISPATCH_TIME_NOW, Int64(NSEC_PER_SEC * 1)) 
dispatch_after(delayTime, dispatch_get_main_queue()){ 
    changeColourOfPage() 
} 
+0

बिल्कुल सही उदाहरण @conner; मेरे लिए बेकार ढंग से काम किया! –

0

एक पुराने सवाल का जवाब देने क्षमा करें, लेकिन सिर्फ यह करने के लिए एक बेहतर तरीका साथ आया था - 3,1

DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(1)) { 
    changeColourOfPage() 
} 

आप जैसे अन्य इकाइयों स्थानापन्न कर सकते हैं स्विफ्ट में

import Darwin //Put this line at the beginning of your file 
func pauseForAMoment() { 

     sleep(1) 
     changeColorOfPage() 

} 
+0

मुझे नहीं लगता कि यह ऐसा करने के लिए _better_ तरीका है क्योंकि जब आप नींद() कहते हैं, तो यह पूरे कार्यक्रम को लटकता है, लेकिन इस विशेष उपयोग के लिए यह काम करता है। – Jerrybibo

0

एक और तरीका है समय अंतराल के लिए .milliseconds(1000) या .microseconds(1_000_000) या .nanoseconds(1_000_000_000)

संबंधित मुद्दे