Combine क्या है और इसकी आवश्यकता क्यों है?
Combine, Apple का रिएक्टिव प्रोग्रामिंग फ्रेमवर्क है, जिसे 2019 में iOS 13 के साथ पेश किया गया था। यह समय के साथ होने वाली घटनाओं को संभालने के लिए एक डिक्लेरेटिव Swift API प्रदान करता है। Combine आपको एसिंक्रोनस इवेंट्स को प्रोसेस करने वाले ऑपरेटर्स को डेटा पाइपलाइन में जोड़ने की सुविधा देता है।
Combine का मुख्य उद्देश्य एसिंक्रोनस ऑपरेशंस को सरल बनाना है: नेटवर्क रिक्वेस्ट, नोटिफिकेशन, KVO (Key-Value Observing), टाइमर, डेलिगेट और कॉलबैक फंक्शन। अलग-अलग मैकेनिज्म के बजाय, Combine Publisher (प्रकाशक) और Subscriber (ग्राहक) पर आधारित एक समान इंटरफेस प्रदान करता है।
मुख्य अवधारणाएं:
- Publisher — डेटा का स्रोत, जो वैल्यू भेज सकता है और समाप्त हो सकता है (सफलता या त्रुटि के साथ)।
- Subscriber — डेटा प्राप्तकर्ता, जो Publisher से इवेंट पर प्रतिक्रिया करता है।
- Operator — एक मेथड जो डेटा स्ट्रीम को बदलता, फ़िल्टर करता या जोड़ता है।
- Subscription — Publisher और Subscriber के बीच का संबंध, जो डेटा प्रवाह को नियंत्रित करता है।
Combine SwiftUI और Foundation के साथ गहराई से एकीकृत है, जो इसे आधुनिक iOS ऐप्स के लिए अपरिहार्य बनाता है।
इंस्टॉलेशन
Combine एक बिल्ट-इन Apple फ्रेमवर्क है। इसका उपयोग करने के लिए CocoaPods, SPM या Carthage के माध्यम से अतिरिक्त पैकेज इंस्टॉल करने की आवश्यकता नहीं है। यह iOS 13, macOS 10.15, tvOS 13 और watchOS 6 से उपलब्ध है।
Combine का उपयोग शुरू करने के लिए, Swift फ़ाइल में इसे इम्पोर्ट करें:
import Combine
यदि आप डिपेंडेंसी मैनेजमेंट के लिए Swift Package Manager का उपयोग करते हैं, तो Combine पहले से स्टैंडर्ड लाइब्रेरी में शामिल है। पुराने OS वर्जन को सपोर्ट करने वाले प्रोजेक्ट्स के लिए, आप OpenCombine का उपयोग कर सकते हैं — Combine का एक ओपन-सोर्स इम्प्लीमेंटेशन।
SPM के माध्यम से OpenCombine इंस्टॉल करना:
// Package.swift में
dependencies: [
.package(url: "https://github.com/CombineOpenSource/Combine.git", from: "0.5.0")
]
कोड उदाहरण के साथ त्वरित शुरुआत
आइए एक सरल उदाहरण देखें: एक ऐरे से Publisher बनाना और उस पर सब्सक्राइब करना।
import Combine
// 1. ऐरे से Publisher बनाएं
let publisher = [1, 2, 3, 4, 5].publisher
// 2. Subscriber बनाएं
let subscriber = Subscribers.Sink<Int, Never>(
receiveCompletion: { completion in
print("समाप्त: \(completion)")
},
receiveValue: { value in
print("मान प्राप्त: \(value)")
}
)
// 3. सब्सक्राइब करें
publisher.subscribe(subscriber)
कंसोल आउटपुट:
मान प्राप्त: 1
मान प्राप्त: 2
मान प्राप्त: 3
मान प्राप्त: 4
मान प्राप्त: 5
समाप्त: finished
sink ऑपरेटर का उपयोग करके अधिक प्राकृतिक तरीका:
import Combine
let cancellable = [1, 2, 3, 4, 5].publisher
.sink(receiveCompletion: { print($0) },
receiveValue: { print($0) })
ध्यान दें: sink एक AnyCancellable लौटाता है। इसे सेव करना ज़रूरी है, अन्यथा स्कोप से बाहर जाने पर सब्सक्रिप्शन तुरंत रद्द हो जाएगा।
मुख्य मेथड/फंक्शन
1. sink(receiveCompletion:receiveValue:)
यह क्या करता है: एक सब्सक्राइबर बनाता है जो Publisher से सभी वैल्यू और समाप्ति प्राप्त करता है। यह स्ट्रीम पर सब्सक्राइब करने का सबसे सरल तरीका है।
पैरामीटर:
receiveCompletion— एक क्लोज़र जो समाप्ति पर कॉल होता है (सफल या त्रुटि के साथ)। यहSubscribers.Completion<Failure>स्वीकार करता है।receiveValue— एक क्लोज़र जो प्रत्येक नई वैल्यू प्राप्त होने पर कॉल होता है।
उदाहरण:
let cancellable = Just("Hello, Combine!")
.sink(receiveCompletion: { print("तैयार: \($0)") } पुस्तकालय में भी
Node.js OAuth क्लाइंट: Google और GitHub से लॉगिन करना सीखें
Go (Golang) में रिएक्टिव प्रोग्रामिंग: लाइब्रेरीज़, पैटर्न और उदाहरण
Quartz.NET C# (.NET) पूर्ण गाइड: शेड्यूलिंग, उदाहरण और ट्यूटोरियल