में सरणी के संदर्भ को संग्रहीत करना मैं किसी ऑब्जेक्ट को एक सरणी पास करना चाहता हूं और इस सरणी का संदर्भ संग्रहीत करना चाहता हूं। मैं इस वस्तु के भीतर इस सरणी को संशोधित करने में सक्षम होना चाहता हूं और यह सुनिश्चित कर सकता हूं कि यह हर जगह संशोधित हो।स्विफ्ट
यहाँ है कि मैं क्या पूरा करने के लिए (कैसे कोड काम नहीं करता है)
class Foo {
var foo : Array<Int>
init(foo: Array<Int>) {
self.foo = foo
}
func modify() {
foo.append(5)
}
}
var a = [1,2,3,4]
let bar = Foo(a)
bar.modify()
print(a) // My goal is that it will print 1,2,3,4,5
मेरे निष्कर्ष अब तक
ए) सरणी (डिफ़ॉल्ट रूप से) अजीब तरीके से पारित कर रहे हैं कोशिश कर रहा हूँ है। यह एक संदर्भ है जब तक आप एक सरणी लंबाई संशोधित नहीं करते हैं। जैसे ही आप एक लंबाई संशोधित करेंगे, इसकी प्रतिलिपि बनाई जाएगी और संशोधित की जाएगी। परिणाम के रूप में, अगर मैं संलग्न या वस्तु यह बाहर
बी नहीं देखा जाएगा में यह से कुछ भी हटाना) मैं एक समारोह पैरामीटर पर inout
उपयोग कर सकते हैं। यह मुझे इस फ़ंक्शन के भीतर संशोधित करने की अनुमति देगा। हालांकि, जैसे ही मैं इसे किसी ऑब्जेक्ट सदस्य को असाइन करने का प्रयास करूंगा, मुझे फिर से ए)
सी) मैं कुछ कंटेनर क्लास में एक सरणी लपेट सकता हूं। यह शायद सबसे साफ तरीका है। हालांकि, मैं क्रमानुसार/इन वस्तुओं deserialize और मैं नहीं बल्कि कंटेनर में रख नहीं होगा (क्योंकि मैं सर्वर से क्रमबद्धता और अक्रमांकन और उसे भेजने के लिए कुछ बातें चारों ओर काम करना होगा)।
क्या कुछ और है? क्या मुझे कुछ स्विफ्ट निर्माण याद आ रहा है जो मुझे ऐसा करने की अनुमति देता है?
आप इसे "ए" को निरंतर घोषित करने की अपेक्षा कैसे करेंगे? इसके अलावा आपको इनआउट पैरामीटर का उपयोग करके इसे पास करना होगा और इसे "&" उपसर्ग –
के साथ अपनी विधि में पास करना होगा, मैं एक var होने के लिए "ए" को बदल सकता हूं। पैरामीटर का उपयोग करना और इनआउट पैरामीटर केवल तभी काम करेगा जब मैं सरणी को उस विधि में संशोधित करता हूं जिस पर इसे पारित किया गया था। जैसे ही मैं "self.foo = foo" करता हूं, यह काम करना बंद कर देगा। Self.foo का अर्थ संशोधन "ए" –
को प्रभावित नहीं करेगा, इसे var के रूप में घोषित करें, var foo परिभाषित करें: [int] = [] {willSet (newArray) {a = newArray}} –