स्विफ्ट 3.0 में विभिन्न दृष्टिकोणों के बीच तुलना
1. नींद
इस विधि में कॉल बैक नहीं है। इस पंक्ति के 4 सेकंड में निष्पादित होने के बाद सीधे कोड रखें। यह उपयोगकर्ता को परीक्षण बटन जैसे UI तत्वों के साथ पुनरावृत्ति करने से रोक देगा जब तक कि समय समाप्त नहीं हो जाता। यद्यपि बटन सोते समय जम जाता है, लेकिन गतिविधि संकेतक जैसे अन्य तत्व अभी भी बिना ठंड के घूम रहे हैं। आप इस क्रिया को नींद के दौरान फिर से ट्रिगर नहीं कर सकते।
sleep(4)
print("done")//Do stuff here
2. डिस्पैच, प्रदर्शन और टाइमर
ये तीन तरीके समान रूप से काम करते हैं, ये सभी बैकग्राउंड थ्रेड पर कॉल बैक के साथ चल रहे हैं, बस अलग-अलग सिंटैक्स और थोड़े अलग फीचर्स के साथ।
डिस्पैच का उपयोग आमतौर पर बैकग्राउंड थ्रेड पर कुछ चलाने के लिए किया जाता है। यह फ़ंक्शन कॉल के भाग के रूप में कॉलबैक है
DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(4), execute: {
print("done")
})
प्रदर्शन वास्तव में एक सरलीकृत टाइमर है। यह देरी के साथ एक टाइमर सेट करता है, और फिर चयनकर्ता द्वारा फ़ंक्शन को ट्रिगर करता है।
perform(#selector(callback), with: nil, afterDelay: 4.0)
func callback() {
print("done")
}}
और अंत में, टाइमर कॉलबैक को दोहराने की क्षमता भी प्रदान करता है, जो इस मामले में उपयोगी नहीं है
Timer.scheduledTimer(timeInterval: 4, target: self, selector: #selector(callback), userInfo: nil, repeats: false)
func callback() {
print("done")
}}
इन तीनों विधि के लिए, जब आप उन्हें ट्रिगर करने के लिए बटन पर क्लिक करते हैं, तो UI फ्रीज नहीं होगा और आपको फिर से उस पर क्लिक करने की अनुमति होगी। यदि आप फिर से बटन पर क्लिक करते हैं, तो एक और टाइमर सेट किया जाता है और कॉलबैक को दो बार ट्रिगर किया जाएगा।
निष्कर्ष के तौर पर
चार में से कोई भी विधि सिर्फ अपने आप से अच्छा काम नहीं करती है। sleep
उपयोगकर्ता इंटरैक्शन को अक्षम कर देगा, इसलिए स्क्रीन " फ्रीज " (वास्तव में नहीं) और खराब उपयोगकर्ता अनुभव का परिणाम है। अन्य तीन विधियां स्क्रीन को फ्रीज नहीं करेंगी, लेकिन आप उन्हें कई बार ट्रिगर कर सकते हैं, और अधिकांश बार, आप तब तक इंतजार करना चाहते हैं जब तक आप उपयोगकर्ता को फिर से कॉल करने की अनुमति देने से पहले कॉल वापस नहीं ले लेते।
तो एक बेहतर डिजाइन स्क्रीन अवरोधन के साथ तीन async विधियों में से एक का उपयोग किया जाएगा। जब उपयोगकर्ता बटन पर क्लिक करता है, तो शीर्ष पर कताई गतिविधि संकेतक के साथ कुछ पारभासी दृश्य के साथ पूरी स्क्रीन को कवर करें, उपयोगकर्ता को यह बताते हुए कि बटन क्लिक को संभाला जा रहा है। फिर कॉल बैक फ़ंक्शन में दृश्य और संकेतक को हटा दें, उपयोगकर्ता को बता रहा है कि कार्रवाई ठीक से नियंत्रित की गई है, आदि।