Swift में एसिंक्रोनस प्रोग्रामिंग का परिचय
iOS और macOS के लिए आधुनिक एप्लिकेशन उच्च प्रतिक्रियाशीलता और प्रदर्शन की मांग करते हैं। Swift में एसिंक्रोनस प्रोग्रामिंग आपको मुख्य थ्रेड (Main Thread) को ब्लॉक किए बिना लंबी अवधि के ऑपरेशन (नेटवर्क अनुरोध, फ़ाइलों के साथ काम करना, डेटा प्रोसेसिंग) करने की अनुमति देता है। Swift 5.5 संस्करण से शुरू करके, Apple ने Swift Concurrency का एक शक्तिशाली मॉडल पेश किया, जो async और await कीवर्ड पर आधारित है, जो पारंपरिक क्लोजर (completion handlers) या DispatchQueue की तुलना में एसिंक्रोनस कोड लिखने को काफी सरल बनाता है।
इस गाइड में, हम सभी प्रमुख अवधारणाओं पर विस्तार से चर्चा करेंगे: async/await की मूल बातों से लेकर Actors और Task Groups जैसे उन्नत विषयों तक। आप सीखेंगे कि अपने Swift प्रोजेक्ट्स के लिए सुरक्षित, पढ़ने योग्य और कुशल एसिंक्रोनस कोड कैसे लिखें।
Swift में async/await की मूल बातें
async और await कीवर्ड Swift Concurrency के केंद्र में हैं। वे आपको एसिंक्रोनस कोड लिखने की अनुमति देते हैं जो सिंक्रोनस दिखता है, जो पठनीयता में काफी सुधार करता है और त्रुटियों की संख्या को कम करता है।
एसिंक्रोनस फंक्शन घोषित करना
किसी फंक्शन को एसिंक्रोनस घोषित करने के लिए, पैरामीटर सूची के बाद, लेकिन रिटर्न टाइप से पहले async कीवर्ड जोड़ें। ऐसा फंक्शन अपने निष्पादन को रोक सकता है।
func fetchUserData(from url: URL) async throws -> Data { let (data, response) = try await URLSession.shared.data(from: url) // HTTP स्थिति की जाँच guard let httpResponse = response as? HTTPURLResponse, httpResponse.statusCode == 200 else { throw URLError(.badServerResponse) } return data}await के साथ एसिंक्रोनस फंक्शन को कॉल करना
एसिंक्रोनस फंक्शन को कॉल करने के लिए await कीवर्ड का उपयोग किया जाता है। यह इंगित करता है कि वर्तमान कोड परिणाम प्राप्त होने तक इस बिंदु पर रुक सकता है।
func loadProfile() async { let url = URL(string: "https://api.example.com/user/profile")! do { let data = try await fetchUserData(from: url) // डेटा प्रोसेसिंग (उदाहरण के लिए, JSON डिकोडिंग) print("डेटा प्राप्त हुआ: \\(data.count) बाइट्स") } catch { print("प्रोफ़ाइल लोड करने में त्रुटि: \\(error.localizedDescription)") }}समानांतर कार्यों के लिए Async let
यदि आपको एक साथ कई स्वतंत्र एसिंक्रोनस ऑपरेशन करने की आवश्यकता है, तो async let कंस्ट्रक्शन का उपयोग करें। यह आपको कार्यों को समानांतर में चलाने और सभी परिणामों की प्रतीक्षा करने की अनुमति देता है।
func loadDashboardData() async -> Dashboard { async let user = fetchUserData(from: URL(string: "https://api.example.com/user")!) async let posts = fetchUserData(from: URL(string: "https://api.example.com/posts")!) async let notifications = fetchUserData(from: URL(string: "https://api.example.com/notifications")!)
// सभी परिणामों की प्रतीक्षा करें let (userData, postsData, notifData) = await (try user, try posts, try notifications) return Dashboard(user: userData, posts: postsData, notifications: notifData)}Task और Structured Concurrency
Swift Concurrency Structured Concurrency की अवधारणा पर आधारित है। इसका मतलब है कि प्रत्येक एसिंक्रोनस कार्य का एक स्पष्ट जीवनकाल और पैरेंट संबंध होता है। मुख्य बिल्डिंग ब्लॉक Task है।
नया कार्य बनाना
Task काम की एक नई एसिंक्रोनस इकाई बनाता है। आप सिंक्रोनस कॉन्टेक्स्ट (उदाहरण के लिए, viewDidLoad में) में एक कार्य बना सकते हैं।
class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() // एसिंक्रोनस कार्य करने के लिए एक नया कार्य बनाएं Task { let data = try await fetchUserData(from: URL(string: "https://