Swift Academy · पाठ

स्ट्रीम को रूपांतरित और संयोजित करना

flatMap, merge, combineLatest और zip का उपयोग कीजिए।

पाठ 1, कुल 4 में से13 चरण

स्ट्रीम को रूपांतरित और संयोजित करना, CoddyKit पर Swift Academy का एक निःशुल्क पाठ है। यह 4 में से 1वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह Swift Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Swift Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

स्ट्रीम के साथ काम करना

कम्बाइन में, एक publisher समय के साथ मानों की स्ट्रीम भेजता है। असली शक्ति उन ऑपरेटरों से आती है, जो इन स्ट्रीमों को बदलकर और मिलाकर नई स्ट्रीम बनाते हैं।

इस पाठ में सबसे महत्वपूर्ण रूपांतरण और संयोजन ऑपरेटर शामिल हैं: flatMap, merge, combineLatest, और zip।

map बनाम flatMap

map हर मान को किसी दूसरे मान में बदलता है। flatMap इससे आगे जाकर हर मान को एक नई publisher में बदलता है और परिणामों को एकल स्ट्रीम में समतल करता है।

जब हर आगत मान से कोई दूसरा एसिंक्रोनस ऑपरेशन शुरू होना हो, तब flatMap का उपयोग करें।

flatMap का प्रयोग

यहाँ उपयोगकर्ता आईडी की एक स्ट्रीम को नेटवर्क अनुरोधों की स्ट्रीम में बदला गया है और फिर उसे उपयोगकर्ताओं की एक स्ट्रीम में समतल किया गया है।

userIdPublisher
    .flatMap { id in
        apiClient.fetchUser(id: id)
    }
    .sink { user in
        print("Loaded", user.name)
    }
    .store(in: &cancellables)

flatMap की समवर्तीता नियंत्रित करना

डिफ़ॉल्ट रूप से flatMap सभी आंतरिक पब्लिशर को एक साथ subscribe करता है। सर्वर पर अत्यधिक भार डालने से बचने के लिए आप maxPublishers से समवर्तीता की सीमा तय कर सकते हैं।

idsPublisher
    .flatMap(maxPublishers: .max(2)) { id in
        apiClient.fetchUser(id: id)
    }
    .sink { print($0) }
    .store(in: &cancellables)

merge

merge एक ही प्रकार के कई पब्लिशरों से आने वाले मानों को एक स्ट्रीम में मिलाता है और हर मान के आते ही उसे भेजता है।

let combined = buttonTapA
    .merge(with: buttonTapB)

combined
    .sink { print("A tap from either button") }
    .store(in: &cancellables)

combineLatest

combineLatest तब भेजता है जब कोई भी आगत publisher मान भेजता है और हर publisher के नवीनतम मान को जोड़ी में शामिल करता है। यह फ़ॉर्म सत्यापन के लिए बहुत उपयोगी है, जहाँ कई फ़ील्ड पर एक साथ विचार करना होता है।

usernamePublisher
    .combineLatest(passwordPublisher)
    .map { name, pass in
        !name.isEmpty && pass.count >= 8
    }
    .sink { isValid in
        print("Form valid:", isValid)
    }
    .store(in: &cancellables)

combineLatest का व्यवहार

ध्यान दें: combineLatest तब तक कुछ नहीं भेजता जब तक हर आगत ने कम-से-कम एक मान न भेज दिया हो। इसके बाद, किसी भी आगत से आने वाला हर नया मान संयुक्त आउटपुट को सक्रिय करता है और बाकी के नवीनतम मानों को साथ लेता है।

zip

zip मानों को अनुक्रमांक के आधार पर जोड़ता है: A का पहला मान B के पहले मान के साथ, दूसरा दूसरे के साथ, और इसी तरह आगे। यह हर स्थान पर दोनों पक्षों के मान आने तक प्रतीक्षा करता है।

let names = ["Ann", "Bob", "Cy"].publisher
let ages = [30, 25, 41].publisher

names
    .zip(ages)
    .sink { name, age in
        print(name, "is", age)
    }
    .store(in: &cancellables)

combineLatest बनाम zip

इन दोनों को आसानी से लेकर भ्रमित हुआ जा सकता है:

  • combineLatest — किसी भी मान के आने पर सक्रिय होता है और हर publisher का नवीनतम मान इस्तेमाल करता है
  • zip — केवल अनुक्रमांक के अनुसार मेल खाती जोड़ियों पर सक्रिय होता है

जीवंत स्थिति के लिए combineLatest का उपयोग करें; समानांतर परिणामों को एक-से-एक मिलाने के लिए zip का उपयोग करें।

समानांतर काम के लिए संयोजन

zip तब बहुत उपयोगी होता है जब स्वतंत्र अनुरोध समानांतर रूप से चलाने हों और उन सभी के पूरा होने की प्रतीक्षा करनी हो।

fetchProfile
    .zip(fetchSettings)
    .sink { profile, settings in
        print("Both loaded")
    }
    .store(in: &cancellables)

ऑपरेटरों की श्रृंखला बनाना

वास्तविक पाइपलाइनें जटिल एसिंक्रोनस प्रवाहों को घोषणात्मक ढंग से व्यक्त करने के लिए कई ऑपरेटरों को एक साथ जोड़ती हैं।

searchTextPublisher
    .removeDuplicates()
    .flatMap { query in
        apiClient.search(query)
    }
    .map { results in
        results.prefix(10)
    }
    .sink { print($0) }
    .store(in: &cancellables)

त्वरित जाँच

ऑपरेटरों के बारे में अपने ज्ञान की जाँच करें।

पुनरावलोकन

आपने स्ट्रीम को बदलना और संयोजित करना सीखा:

  • flatMap — मान से publisher, फिर समतल
  • merge — एक ही प्रकार की स्ट्रीमों को आपस में मिलाता है
  • combineLatest — हर publisher का नवीनतम मान, किसी भी मान पर सक्रिय
  • zip — अनुक्रमांक के अनुसार मेल खाती जोड़ियाँ

ये ऑपरेटर आपको जटिल एसिंक्रोनस लॉजिक को घोषणात्मक ढंग से संयोजित करने देते हैं।

शुरुआत निःशुल्क

एआई शिक्षक के साथ Swift सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
122
पाठ
409

अक्सर पूछे जाने वाले प्रश्न

क्या “स्ट्रीम को रूपांतरित और संयोजित करना” पाठ निःशुल्क है?

हाँ — Swift Academy अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “स्ट्रीम को रूपांतरित और संयोजित करना” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। Swift Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“स्ट्रीम को रूपांतरित और संयोजित करना” में मैं क्या सीखूँगा?

flatMap, merge, combineLatest और zip का उपयोग कीजिए। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Swift Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या Swift Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Swift Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 1वाँ पाठ है।

“स्ट्रीम को रूपांतरित और संयोजित करना” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस Swift Academy पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर Swift Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. स्ट्रीम को रूपांतरित और संयोजित करना
  2. शेड्यूलर और थ्रेडिंग
  3. त्रुटि सँभालने वाले ऑपरेटर
  4. कस्टम पब्लिशर और सब्सक्राइबर
← Swift Academy पर वापस जाएँ