रीसेट करने के लिए कैसे स्थैतिक चर में एक संरचना उनके डिफ़ॉल्ट मानों के लिए - स्विफ्ट

0

सवाल

मैं एक संरचना के साथ कुछ स्थिर चर है कि मैं की जरूरत का उपयोग करने के लिए भर में मेरे app (मैं का उपयोग नहीं किया एक सिंगलटन वर्ग, क्योंकि अभी तक मैं की आवश्यकता हो सकती है कई उदाहरणों में भविष्य में, लेकिन अभी मैं सिर्फ यह एक उदाहरण के लिए).

प्रत्येक स्थैतिक चर असाइन किया गया है एक डिफ़ॉल्ट मान है, लेकिन इन मूल्यों को बदल पाने के जीवनकाल भर में अनुप्रयोग. मैं भी दुकान में इन परिवर्तनों UserDefaults तो वे लगातार हो इनवोकेशन के बीच है, लेकिन मैं अभी भी इन का उपयोग स्थैतिक चर, क्योंकि मैं नहीं चाहता से पढ़ने के लिए UserDefaults हर समय.

अब मैं चाहता हूँ विकल्प को रीसेट करने के लिए इन सभी मूल्यों के लिए उनके मूल डिफ़ॉल्ट मान और मैं नहीं कर सकते हैं बाहर आंकड़ा कैसे यह करने के लिए सही ढंग से. मैं का उपयोग कर सकते हैं एक अलग संरचना है, जो होगा पकड़ डिफ़ॉल्ट मान का उपयोग तो एक समारोह को बदलने के लिए मूल्यों में से एक के लिए अपने संबंधित चर में अन्य. लेकिन यह नहीं लगता है तो सुरुचिपूर्ण और वहाँ होना चाहिए एक अच्छा तरीका यह करना है कि मैं याद कर रहा हूँ.

मैं जोड़ने की कोशिश की एक समारोह के अंदर संरचना है जो निम्न है:

func resetDefaults() {
    self = DefaultStruct()
}

संकलक मुझे बताया कि मैं नहीं बदल सकते हैं और बनाने के लिए की जरूरत समारोह परिवर्तनशील. तो मैंने किया. लेकिन फिर कहीं अपने कोड में, में एक और वर्ग है, इस समारोह में नहीं रह गया है की गुंजाइश है । अगर मैं संलग्न:

DefaultStruct.resetDefaults()

यह मुझे देता है, अन्य त्रुटियों, इस तरह के रूप में:

Instance member 'resetDefaults' cannot be used on type 'DefaultStruct'; did you mean to use a value of this type instead?

इसके अलावा, क्योंकि मैं का उपयोग स्थैतिक चर के इस संरचना सीधे है, मैं कभी नहीं initialized इस संरचना है । दूसरे शब्दों में, मैं नहीं है इस तरह के एक संरचना के नाम से है कि मैं का उपयोग कर सकते हैं कहीं और. या शायद मैं गलत कर रहा हूँ यहाँ, और मैं कर रहा हूँ कुछ याद आ रही???

तुम्हारी मदद की बहुत सराहना की जाएगी. या तो मैं याद कर रहा हूँ कुछ बहुत ही बुनियादी या मैं बस का उपयोग एक अलग संरचना के साथ डिफ़ॉल्ट मान के रूप में मैंने पहले कहा.

धन्यवाद!

default-value static swift
2021-11-23 19:03:17
1

सबसे अच्छा जवाब

1

के रूप में एक बहुत ही तुच्छ उदाहरण दर्शाता है कि अवधारणा

struct Foo {
   private enum Defaults {
     static let barDefault = "Initial String"
   }
   
   static var bar: String = Defaults.barDefault
   
   static func reset() {
      bar = Defaults.barDefault
   }
   
}
    
print(Foo.bar)  //Initial String

Foo.bar = "New String"
print(Foo.bar)  // New String

Foo.reset()
print(Foo.bar)  // Initial String

इस का उपयोग करता है एक निजी इनम पकड़ करने के लिए डिफ़ॉल्ट तार तो यह (एक) रहता है inernal संरचना के लिए, यहां तक कि में इस्तेमाल किया जब अन्य स्थैतिक गुण और (ख) इतना है कि यह नहीं किया जा सकता है चालू करके गलती की है.

यदि आप एक अधिक जटिल प्रकार के लिए चर का उपयोग करें, एक initialiser के साथ एक डिफ़ॉल्ट मान है कि प्रारंभिक / रीसेट मूल्य है तो आप क्या कर सकते हैं इस तरह से कुछ:

struct Foo {
   struct ComplexStruct{
       var x: SomeType

       init(x: SomeType = DefaultValue) { self.x = x }
   }

   static var bar = ComplexStruct()
   
   static func reset() {
      bar = ComplexStruct()
   }
}
2021-11-24 00:38:42

आपके उत्तर के लिए धन्यवाद. में 1 हिस्सा है, तो आप "प्रारंभिक स्ट्रिंग" दो बार, एक बार में एक चर घोषणा और एक बार में रीसेट() समारोह. कि वास्तव में क्या मैं चाहता था से बचने के लिए के रूप में अगर मैं की जरूरत है कुछ बदलने के लिए, डिफ़ॉल्ट मान मैं हमेशा के लिए याद करने के लिए ऐसा करने में 2 स्थानों और यही कारण त्रुटियों के लिए. मैं आशा व्यक्त की कि वहाँ होगा एक तरह से परिभाषित करने के लिए यह सिर्फ एक बार में एक और अधिक सुंदर तरीका है । के लिए के रूप में 2 आधा, मैं इसे बाहर की कोशिश करो और वापस पाने के लिए. एक बार फिर धन्यवाद. इस महान है मदद!
rafi

@रफी मैं संभवतः बना पहला भाग बहुत तुच्छ है. मैं बस अद्यतन के जवाब यह पता करने के लिए.
flanker

धन्यवाद फिर से इस अद्यतन के लिए! पहला हिस्सा अब है इसी तरह करने के लिए मैं क्या सोचा था कि मैं क्या करना चाहते हैं, लेकिन अपने सुझाव का उपयोग कर के एक enum और इन मूलभूत मूल्यों के अंदर एक ही संरचना ही उत्कृष्ट है! के बाद से हम एक ही बात करते हैं की घोषणा जब उन चर और जब रीसेट मूल्यों, मैं उम्मीद कर रहा था हम लिख सकता है इस कोड को सिर्फ एक बार और फिर शायद एक initializer होगा जो कॉल रीसेट() समारोह है, लेकिन मैं नहीं था इसे बनाने में सफल काम तो मैं समाप्त कर रही है कि क्या वास्तव में आप का सुझाव दिया और कहा कि अब पूरी तरह से काम करता है. तो एक बार फिर धन्यवाद!
rafi

अन्य भाषाओं में

यह पृष्ठ अन्य भाषाओं में है

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

इस श्रेणी में लोकप्रिय

लोकप्रिय सवाल इस श्रेणी में