स्विफ्ट में चीजों के प्रकार
नियम है:
वर्ग उदाहरण संदर्भ प्रकार हैं (अर्थात एक वर्ग उदाहरण के लिए आपका संदर्भ प्रभावी रूप से एक सूचक है )
कार्य संदर्भ प्रकार हैं
बाकी सब कुछ एक मूल्य प्रकार है ; "बाकी सब कुछ" का अर्थ है केवल संरचना और उदाहरणों के उदाहरणों का उदाहरण, क्योंकि स्विफ्ट में यह सब है। उदाहरण के लिए, ऐरे और स्ट्रिंग्स संरचनात्मक उदाहरण हैं। आप उन चीजों में से एक का संदर्भ (एक फ़ंक्शन तर्क के रूप में) पते का उपयोग करके और पास कर सकते हैं inout
, जैसा कि newacct ने बताया है। लेकिन प्रकार स्वयं एक मूल्य प्रकार है।
क्या संदर्भ प्रकार आप के लिए मतलब है
एक संदर्भ प्रकार की वस्तु व्यवहार में विशेष है क्योंकि:
कार्य करने या कार्य करने के लिए पास होने से एक ही वस्तु के कई संदर्भ मिल सकते हैं
ऑब्जेक्ट स्वयं भी उत्परिवर्तित है भले ही इसका संदर्भ एक स्थिर ( let
या तो स्पष्ट या निहित) हो।
वस्तु का एक उत्परिवर्तन उस वस्तु को प्रभावित करता है जैसा कि सभी संदर्भों द्वारा देखा जाता है।
वे खतरे हो सकते हैं, इसलिए नज़र रखें। दूसरी ओर, एक संदर्भ प्रकार पास करना स्पष्ट रूप से कुशल है क्योंकि केवल एक पॉइंटर को कॉपी और पास किया जाता है, जो कि तुच्छ है।
क्या मूल्य प्रकार आप के लिए मतलब है
स्पष्ट रूप से, एक मान प्रकार पास करना "सुरक्षित" है, और let
इसका अर्थ है कि यह कहता है: आप एक let
संदर्भ के माध्यम से एक संरचनात्मक उदाहरण या एनम उदाहरण को उत्परिवर्तित नहीं कर सकते । दूसरी ओर, उस मूल्य की एक अलग प्रतिलिपि बनाकर सुरक्षा प्राप्त की जाती है, है ना? क्या यह मूल्य प्रकार को संभावित रूप से महंगा बनाना नहीं है?
खैर, हाँ और नहीं। यह उतना बुरा नहीं है जितना आप सोच सकते हैं। जैसा कि नैट कुक ने कहा है, एक वैल्यू टाइप पास करना अनिवार्य रूप से कॉपी करने का नहीं है , क्योंकि let
(स्पष्ट या निहित) अपरिवर्तनीयता की गारंटी देता है, इसलिए कुछ भी कॉपी करने की आवश्यकता नहीं है। और यहां तक कि एक var
संदर्भ में गुजरने का मतलब यह नहीं है कि चीजों को कॉपी किया जाएगा , केवल यह कि वे आवश्यक हो सकते हैं (क्योंकि वहाँ एक उत्परिवर्तन है)। डॉक्स आपको विशेष रूप से सलाह देता है कि आप अपने घुटनों को मोड़ में न लें।