ग्लोबल वैरिएबल कैसे बनाएं?


123

मेरे पास एक वैश्विक चर है जिसे मेरे ViewControllers के बीच साझा करने की आवश्यकता है।

ऑब्जेक्टिव-सी में, मैं एक स्टैटिक वेरिएबल को परिभाषित कर सकता हूं, लेकिन मैं स्विफ्ट में एक ग्लोबल वैरिएबल को परिभाषित करने का तरीका नहीं खोज सकता।

क्या आप इसे करने का एक तरीका जानते हैं?




आप वर्ग के बाहर चर या संरचना को परिभाषित कर सकते हैं तब आप समग्र अनुप्रयोग में उस चर का उपयोग कर सकते हैं।
चांदनी

जवाबों:


209

आधिकारिक स्विफ्ट प्रोग्रामिंग गाइड से :

वैश्विक चर वे चर हैं जो किसी फ़ंक्शन, विधि, बंद करने या संदर्भ के प्रकार के बाहर परिभाषित किए जाते हैं। वैश्विक स्थिरांक और चर हमेशा आलस्य में गणना की जाती हैं।

आप इसे किसी भी फाइल में परिभाषित कर सकते हैं और इसे वर्तमान में moduleकहीं भी एक्सेस कर सकते हैं । तो आप इसे किसी भी दायरे से बाहर फाइल में कहीं भी परिभाषित कर सकते हैं। इसके लिए कोई आवश्यकता नहीं है staticऔर सभी वैश्विक चर की गणना आलसी द्वारा की जाती है।

 var yourVariable = "someString"

आप इसे वर्तमान मॉड्यूल में कहीं से भी एक्सेस कर सकते हैं।

हालाँकि आपको इससे बचना चाहिए क्योंकि ग्लोबल वैरिएबल एप्लिकेशन स्टेट और मुख्य रूप से बग के कारण अच्छे नहीं हैं।

जैसा कि इस उत्तर में दिखाया गया है , स्विफ्ट में आप उन्हें अंदर ले structजा सकते हैं और कहीं भी पहुंच सकते हैं। आप स्विफ्ट में भी स्थिर चर या स्थिरांक को परिभाषित कर सकते हैं। में Encapsulatestruct

struct MyVariables {
    static var yourVariable = "someString"
}

आप इस वैरिएबल का उपयोग किसी भी वर्ग या कहीं भी कर सकते हैं

let string = MyVariables.yourVariable
println("Global variable:\(string)")

//Changing value of it
MyVariables.yourVariable = "anotherString"

3
आपका struct कहा जाता है MyVariables, तो MyViewStateएक प्रति की तरह दिखता है / से त्रुटि पेस्ट stackoverflow.com/a/24868789/1187415 :)
मार्टिन आर

धन्यवाद मार्टिन आर। हाँ, मैंने इससे कोड की नकल की है
कोडस्टर

9
यदि आप किसी अन्य उत्तर से कोड कॉपी करते हैं तो आपको यह स्पष्ट रूप से बताना चाहिए (मूल उत्तर के लिंक के साथ)। की तुलना करें stackoverflow.com/help/referencing
मार्टिन आर

1
मिल गया धन्यवाद! लेकिन क्या ग्लोबल वैरिएबल और स्ट्रक्चर में इनकैप्सुलेट के बीच कोई अंतर है?
czzhengkw

3
क्या "MyVariables" को वैश्विक नहीं माना जाएगा? यदि हम इसे वैश्विक संरचना या चर के रूप में घोषित करते हैं तो इससे क्या फर्क पड़ता है?
सत्यम

15

वैश्विक चर जो किसी भी पद्धति या बंद के बाहर परिभाषित किए गए हैं, निजी कीवर्ड का उपयोग करके प्रतिबंधित किया जा सकता है।

import UIKit

// MARK: Local Constants

private let changeSegueId = "MasterToChange"
private let bookSegueId   = "MasterToBook"

32
एक स्थिरांक ("चलो") एक चर नहीं है।
माइक टैवर्न

2
@MikeTaverne आप सही हैं लेकिन आप इसे "var" के रूप में पेश कर सकते हैं तो यह उत्तर ठीक होगा। flextipsnet.wordpress.com/2016/09/11/…
मिलाद फरीदिया

4

यदि आप इसे अपनी उन सभी कक्षाओं में उपयोग करना चाहते हैं, जिनका आप उपयोग कर सकते हैं:

public var yourVariable = "something"

यदि आप केवल एक वर्ग का उपयोग करना चाहते हैं, तो आप इसका उपयोग कर सकते हैं:

var yourVariable = "something"
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.