2016-12-08 3 views
5

यदि मेरे पास क्लास एट्रिब्यूट के अंदर स्विफ्ट में एक स्ट्रक्चर है और मैं स्ट्रक्चर ऑब्जेक्ट की प्रतिलिपि बनाता हूं, तो क्लास एट्रिब्यूट प्रतिलिपि या संदर्भ द्वारा पारित किया गया है?असाइनमेंट के दौरान कॉपी द्वारा पारित संरचना के अंदर त्वरित कक्षाएं हैं?

उत्तर

12

संदर्भ द्वारा उत्तीर्ण। आप इसका परीक्षण कर सकते हैं। घोषित:

class A{} 
struct B { let a = A()} 

तो:

let b = B() 
print("A = \(unsafeAddressOf(b.a))")//0x0000600000019450 
let b_copy = b 
print("A = \(unsafeAddressOf(b_copy.a))")//0x0000600000019450 
5

सभी गुण एक struct के कॉपी कर रहे हैं (जैसे कि आप सौंपा (=) नया struct की इसी संपत्ति को वर्ष struct के प्रत्येक संपत्ति) जब संरचना की प्रतिलिपि बनाई जाती है, तो टाइप किए बिना।

जब आप "कक्षा विशेषता" कहते हैं, तो मुझे लगता है कि आप संदर्भ प्रकार का एक चर है। (एक वर्ग के समान नाम वाला प्रकार उन संदर्भों के संदर्भ संदर्भ को दर्शाता है जो उस वर्ग की वस्तुओं को इंगित करते हैं।) संदर्भ प्रकार (एक संदर्भ) का मान कॉपी करना एक और संदर्भ उत्पन्न करता है जो एक ही ऑब्जेक्ट को इंगित करता है। ध्यान दें कि स्विफ्ट में "ऑब्जेक्ट्स" मान नहीं हैं - कोई "ऑब्जेक्ट प्रकार" नहीं हैं - बल्कि, ऑब्जेक्ट्स हमेशा उन संदर्भों के माध्यम से छेड़छाड़ की जाती हैं जो उन्हें इंगित करती हैं।

संबंधित मुद्दे