शुरुआत के बाद से, Swift ने ObjC और C को अधिक Swifty बनाने के लिए कुछ सुविधाएं प्रदान की हैं, प्रत्येक संस्करण के साथ अधिक जोड़ रहा है। अब, स्विफ्ट 3 में, नया "इम्पोर्ट फ़ॉर मेम्बर" फ़ीचर C API की कुछ शैलियों के साथ फ्रेमवर्क देता है - जहाँ आपके पास एक डेटा प्रकार होता है जो एक वर्ग की तरह काम करता है, और इसके साथ काम करने के लिए वैश्विक कार्यों का एक गुच्छा - स्विफ्ट-देशी एपीआई की तरह कार्य करें। डेटा प्रकार स्विफ्ट कक्षाओं के रूप में आयात करते हैं, उनके संबंधित वैश्विक फ़ंक्शन उन वर्गों पर विधियों और गुणों के रूप में आयात करते हैं, और कुछ संबंधित चीजें जैसे स्थिरांक सेट उपयुक्त हो सकते हैं।
Xcode 8 / स्विफ्ट 3 बीटा में, Apple ने इस सुविधा (कुछ अन्य के साथ) को डिस्पैच ढांचे को और अधिक Swifty बनाने के लिए लागू किया है। (और कोर ग्राफिक्स , भी।) यदि आप स्विफ्ट ओपन-सोर्स प्रयासों का पालन कर रहे हैं, तो यह खबर नहीं है , लेकिन अब यह पहली बार है जब यह Xcode का हिस्सा है।
किसी भी प्रोजेक्ट को स्विफ्ट 3 में ले जाने पर आपका पहला कदम इसे Xcode 8 में खोलना और मेनू में Edit> Convert> To Current Swift Syntax ... को चुनना होगा । यह सभी नामांकित एपीआई और अन्य परिवर्तनों के लिए एक बार में आवश्यक परिवर्तनों के (आपकी समीक्षा और अनुमोदन के साथ) लागू होगा। (अक्सर, कोड की एक पंक्ति इन परिवर्तनों में से एक से अधिक बार प्रभावित होती है, इसलिए त्रुटि को ठीक करने के लिए प्रतिक्रिया-व्यक्तिगत रूप से सब कुछ ठीक से संभाल सकती है।)
नतीजा यह है कि पृष्ठभूमि और वापस काम करने के लिए शेख़ी के लिए सामान्य पैटर्न अब इस तरह दिखता है:
// Move to a background thread to do some long running work
DispatchQueue.global(qos: .userInitiated).async {
let image = self.loadOrGenerateAnImage()
// Bounce back to the main thread to update the UI
DispatchQueue.main.async {
self.imageView.image = image
}
}
ध्यान दें कि हम .userInitiated
पुराने DISPATCH_QUEUE_PRIORITY
स्थिरांक के बजाय उपयोग कर रहे हैं । सेवा की गुणवत्ता (क्यूओएस) विनिर्देशक ओएस एक्स 10.10 / आईओएस 8.0 में पेश किए गए थे, जो सिस्टम को काम को प्राथमिकता देने और पुराने प्राथमिकता वाले विनिर्देशकों को हटाने के लिए एक स्पष्ट रास्ता प्रदान करते हैं। विवरण के लिए पृष्ठभूमि के काम और ऊर्जा दक्षता पर Apple के डॉक्स देखें।
वैसे, यदि आप काम को व्यवस्थित करने के लिए अपनी खुद की कतारें रख रहे हैं, तो एक प्राप्त करने का तरीका अब इस तरह दिखता है (नोटिस जो कि DispatchQueueAttributes
एक है OptionSet
, इसलिए आप विकल्पों को संयोजित करने के लिए संग्रह-शैली के शाब्दिक का उपयोग करते हैं):
class Foo {
let queue = DispatchQueue(label: "com.example.my-serial-queue",
attributes: [.serial, .qosUtility])
func doStuff() {
queue.async {
print("Hello World")
}
}
}
dispatch_after
बाद में काम करने के लिए उपयोग करना ? यह कतारों पर एक विधि है, और यह एक लेता है DispatchTime
, जिसमें विभिन्न संख्यात्मक प्रकारों के लिए ऑपरेटर होते हैं ताकि आप बस संपूर्ण या आंशिक जोड़ जोड़ सकें:
DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { // in half a second...
print("Are we there yet?")
}
आप Xcode 8 में इसका इंटरफ़ेस खोलकर नए डिस्पैच एपीआई के चारों ओर अपना रास्ता पा सकते हैं - डिस्पैच मॉड्यूल को खोजने के लिए जल्दी से ओपन का उपयोग करें, या DispatchQueue
अपने स्विफ्ट प्रोजेक्ट / खेल के मैदान में एक प्रतीक (जैसे ) डालें और इसे क्लिक करें, फिर चारों ओर झुकें वहां से मॉड्यूल। (आप एप्पल के स्पिफी न्यू एपीआई रेफरेंस वेबसाइट और इन-एक्सकोड डॉक दर्शक में स्विफ्ट डिस्पैच एपीआई पा सकते हैं , लेकिन ऐसा लगता है कि सी संस्करण से डॉक सामग्री अभी तक इसमें स्थानांतरित नहीं हुई है।)
अधिक सुझावों के लिए माइग्रेशन गाइड देखें ।