2015-10-16 5 views
7

स्विफ्ट में स्थिर चर कैसे संग्रहीत हैं?स्विफ्ट में स्मृति में स्थिर चर कैसे संग्रहीत किए जाते हैं?

  1. क्या होता है यदि मैं कभी भी func useStaticVar() को कॉल नहीं करता? क्या ये चर प्रारंभिक हैं या नहीं?

  2. क्या होता है यदि मैं कॉल का उपयोग करता हूं StaticVar() और फिर कभी उन्हें एक्सेस नहीं करता?

    अर
    struct Something { 
        static var myVariable = 0 
        static let myConstant = 3 
        static var myString: String? 
    
        static func useStaticVar() { 
         myVariable = myConstant 
         myString = String(myVariable) 
        } 
    } 
    

उत्तर

1
static var myVariable = 0 
static let myConstant = 3 

प्रारंभ कर रहे हैं। myString func useStaticVar में प्रारंभ किया गया है। यदि आप इसे कॉल नहीं करते हैं तो यह nil रहेगा, क्योंकि यह वैकल्पिक है। static विधियों को ओवरराइड नहीं किया जा सकता है। कुछ घुसपैठ की जानकारी here है।

+0

जब इसे initalized किया जाता है? जब कार्यक्रम चलता है? पहले किया गया FinishLaunchingWithOptions? इसके बाद? – Esqarrouth

0

चेक करें: Type Properties

नोट

संग्रहीत उदाहरण गुण के विपरीत, आप हमेशा संग्रहीत प्रकार गुण एक डिफ़ॉल्ट मान देना चाहिए। ऐसा इसलिए है क्योंकि इस प्रकार के पास कोई प्रारंभिक नहीं है जो प्रारंभिक समय पर संग्रहीत प्रकार की संपत्ति को मान निर्दिष्ट कर सकता है।

संग्रहीत प्रकार की संपत्तियों को उनकी पहली पहुंच पर आलसी शुरू किया गया है। उन्हें केवल एक बार आरंभ करने की गारंटी है, भले ही एकाधिक धागे द्वारा एक्सेस किया गया हो, और आलसी संशोधक के साथ उन्हें चिह्नित करने की आवश्यकता नहीं है।

आपको हमेशा संग्रहीत प्रकार गुणों को एक डिफ़ॉल्ट मान देना होगा।

आपका कोड का अभाव एक डिफ़ॉल्ट मानmyString के लिए, ऐसे मामलों में, स्विफ्ट यह एक डिफ़ॉल्ट nil दे।

संग्रहीत प्रकार की संपत्तियों को उनकी पहली पहुंच पर आलसी शुरू किया गया है।

आप परीक्षण और देखते हैं कि संग्रहीत प्रकार गुण इस तरह की कुछ कोड के साथ initilized कर रहे हैं कर सकते हैं:

func ZeroGenerator() -> Int { 
    print(#function) 
    return 0 
} 

func ThreeGenerator() -> Int { 
    print(#function) 
    return 3 
} 

func NilGeneartor() -> String? { 
    print(#function) 
    return nil 
} 

struct Something { 
    static var myVariable = ZeroGenerator() 
    static let myConstant = ThreeGenerator() 
    static var myString: String? = NilGeneartor() 

    static func useStaticVar() { 
     print(#function) 
     myVariable = myConstant 
     myString = String(myVariable) 
    } 
} 

Something.useStaticVar() 

आउटपुट:

useStaticVar() 
ZeroGenerator() 
ThreeGenerator() 
NilGeneartor() 

संकलक, निरंतर मूलभूत मूल्यों के लिए कुछ अनुकूलन कर सकते हैं, लेकिन अर्थात् कोई अंतर नहीं।

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