आपको नहीं करना चाहिए यह एक आम गलत धारणा है कि SwiftUI MVVM के साथ सबसे अच्छा काम करती है।
MVVM का SwfitUI में कोई स्थान नहीं है। आप पूछ रहे हैं कि क्या आप आयत को हिला सकते हैं
एक त्रिकोण आकार फिट। यह फिट नहीं होगा।
आइए कुछ तथ्यों और कदम से कदम मिलाकर चलते हैं:
ViewModel MVVM में एक मॉडल है।
MVVM मान प्रकार (उदाहरण के लिए जावा में ऐसी कोई चीज) नहीं लेता है।
एक मान प्रकार मॉडल (राज्य के बिना मॉडल) को संदर्भ से अधिक सुरक्षित माना जाता है
टाइप मॉडल (राज्य के साथ मॉडल) अपरिवर्तनीयता के अर्थ में।
अब, MVVM को आपको इस तरह से एक मॉडल स्थापित करने की आवश्यकता होती है, जब भी यह बदलता है, इसे
अद्यतन कुछ पूर्व-निर्धारित तरीके से देखें। इसे बाइंडिंग के रूप में जाना जाता है।
बंधन के बिना, आपको चिंताओं का अच्छा पृथक्करण नहीं होगा, उदाहरण के लिए; बाहर निकालकर
मॉडल और संबंधित राज्य और उन्हें देखने से अलग रखते हैं।
ये दो चीजें हैं जो अधिकांश iOS MVVM डेवलपर्स विफल हैं:
पारंपरिक जावा अर्थों में iOS का कोई "बाध्यकारी" तंत्र नहीं है।
कुछ लोग सिर्फ बाध्यकारी को अनदेखा करेंगे, और किसी वस्तु को देखने के लिए सोचेंगे
स्वचालित रूप से सब कुछ हल करता है; कुछ केवीओ-आधारित आरएक्स और पेश करेंगे
MVVM चीजों को सरल बनाने के लिए माना जाता है जब सब कुछ जटिल।
राज्य के साथ मॉडल अभी बहुत खतरनाक है
क्योंकि MVVM ViewModel पर बहुत अधिक जोर देता है, राज्य प्रबंधन पर बहुत कम
और नियंत्रण में सामान्य विषयों; अधिकांश डेवलपर्स समाप्त हो जाते हैं
राज्य के साथ एक मॉडल के बारे में सोचना जो दृश्य को अद्यतन करने के लिए उपयोग किया जाता है पुन: प्रयोज्य और
परीक्षण करने योग्य ।
यही कारण है कि स्विफ्ट पहली जगह में मूल्य प्रकार का परिचय देता है; बिना एक मॉडल
राज्य।
अब आपके प्रश्न के लिए: आप पूछते हैं कि क्या आपके ViewModel के पास EnvironmentObject (EO) तक पहुंच हो सकती है?
आपको नहीं करना चाहिए क्योंकि SwiftUI में एक मॉडल जो अपने आप व्यू के अनुरूप है
ईओ के संदर्भ में। उदाहरण के लिए,
struct Model: View {
@EnvironmentObject state: State
// automatic binding in body
var body: some View {...}
}
मुझे उम्मीद है कि लोग इस बात की सराहना कर सकते हैं कि कॉम्पैक्ट एसडीके को कैसे डिज़ाइन किया गया है।
SwiftUI में, MVVM स्वचालित है । एक अलग ViewModel ऑब्जेक्ट की कोई आवश्यकता नहीं है
यह मैन्युअल रूप से देखने के लिए बाध्य करता है जिसके लिए एक EO संदर्भ की आवश्यकता होती है।
इसके बाद के संस्करण कोड है MVVM। उदाहरण के लिए, देखने के लिए बाध्यकारी के साथ एक मॉडल।
लेकिन क्योंकि मॉडल वैल्यू टाइप है, इसलिए मॉडल और स्टेट को रिफैक्ट करने की बजाय
मॉडल देखें, आप नियंत्रण से बाहर हैं (उदाहरण के लिए, प्रोटोकॉल एक्सटेंशन में)।
यह आधिकारिक एसडीके है, जो कि केवल फीचर के बजाय, भाषा की विशेषता के लिए डिजाइन पैटर्न को अपनाता है
इसे लागू करना। आकार से अधिक पदार्थ।
अपने समाधान को देखें, आपको सिंगलटन का उपयोग करना होगा जो मूल रूप से वैश्विक है। आप
यह जानना चाहिए कि बिना सुरक्षा के वैश्विक रूप से कहीं भी पहुंचना कितना खतरनाक है
अपरिवर्तनीयता, जो आपके पास नहीं है क्योंकि आपको संदर्भ प्रकार मॉडल का उपयोग करना है!
टी एल; डॉ
आप SwiftUI में जावा तरीके से MVVM नहीं करते हैं। और यह करने के लिए स्विफ्ट-वाई रास्ता कोई जरूरत नहीं है
यह करने के लिए, यह पहले से ही अंतर्निहित है।
आशा है कि अधिक डेवलपर इसे देखते हैं क्योंकि यह एक लोकप्रिय प्रश्न लगता है।