स्विफ्ट 5+
कोई भी जवाब वास्तव में स्थानीय भंडारण क्षमताओं में निर्मित डिफ़ॉल्ट को विस्तार से कवर नहीं करता है। यह सिर्फ तार से कहीं अधिक कर सकता है ।
आपके पास डिफॉल्ट से डेटा प्राप्त करने के लिए ऐप्पल डॉक्यूमेंटेशन से सीधे निम्नलिखित विकल्प हैं।
func object(forKey: String) -> Any?
//Returns the object associated with the specified key.
func url(forKey: String) -> URL?
//Returns the URL associated with the specified key.
func array(forKey: String) -> [Any]?
//Returns the array associated with the specified key.
func dictionary(forKey: String) -> [String : Any]?
//Returns the dictionary object associated with the specified key.
func string(forKey: String) -> String?
//Returns the string associated with the specified key.
func stringArray(forKey: String) -> [String]?
//Returns the array of strings associated with the specified key.
func data(forKey: String) -> Data?
//Returns the data object associated with the specified key.
func bool(forKey: String) -> Bool
//Returns the Boolean value associated with the specified key.
func integer(forKey: String) -> Int
//Returns the integer value associated with the specified key.
func float(forKey: String) -> Float
//Returns the float value associated with the specified key.
func double(forKey: String) -> Double
//Returns the double value associated with the specified key.
func dictionaryRepresentation() -> [String : Any]
//Returns a dictionary that contains a union of all key-value pairs in the domains in the search list.
यहाँ 'सेटिंग' के लिए विकल्प हैं
func set(Any?, forKey: String)
//Sets the value of the specified default key.
func set(Float, forKey: String)
//Sets the value of the specified default key to the specified float value.
func set(Double, forKey: String)
//Sets the value of the specified default key to the double value.
func set(Int, forKey: String)
//Sets the value of the specified default key to the specified integer value.
func set(Bool, forKey: String)
//Sets the value of the specified default key to the specified Boolean value.
func set(URL?, forKey: String)
//Sets the value of the specified default key to the specified URL.
यदि प्राथमिकताएं जैसी चीजें संग्रहीत की जा रही हैं और एक बड़ा डेटा सेट नहीं है तो ये पूरी तरह से ठीक विकल्प हैं।
दोहरा उदाहरण :
स्थापना:
let defaults = UserDefaults.standard
var someDouble:Double = 0.5
defaults.set(someDouble, forKey: "someDouble")
मिल रहा:
let defaults = UserDefaults.standard
var someDouble:Double = 0.0
someDouble = defaults.double(forKey: "someDouble")
एक प्राप्तकर्ता के बारे में क्या दिलचस्प है शब्दकोश रिप्रजेंटेशन , यह आसान गेट्टर आपके सभी डेटा प्रकारों की परवाह किए बिना होगा जो वे हैं और उन्हें एक अच्छे शब्दकोश में डालते हैं जिसे आप स्ट्रिंग नाम से एक्सेस कर सकते हैं और जब आप पूछते हैं तो सही संगत डेटा प्रकार दे सकते हैं। चूंकि यह 'किसी भी' प्रकार का है ।
आप अपने स्वयं के वर्ग और वस्तुओं को स्टोर कर सकते हैं और तदनुसार func set(Any?, forKey: String)
और func object(forKey: String) -> Any?
सेटर और गेट्टर का उपयोग कर सकते हैं ।
आशा है कि यह स्थानीय डेटा संग्रहीत करने के लिए UserDefaults वर्ग की अधिक शक्ति को स्पष्ट करता है।
आपको कितना और कितना स्टोर करना चाहिए, इस नोट पर, हार्डी_गर्मनी ने इस पोस्ट पर एक अच्छा जवाब दिया , यहां से एक उद्धरण दिया गया है
जैसा कि पहले ही उल्लेख किया गया है: मैं किसी भी SIZE सीमा (भौतिक मेमोरी को छोड़कर) में एक .plist (जैसे UserDefaults) में डेटा संग्रहीत करने के बारे में नहीं जानता। तो यह HOW MUCH का सवाल नहीं है।
असली सवाल यह होना चाहिए कि आप नए / परिवर्तित मूल्य कैसे लिखते हैं ... और यह बैटरी नाली से संबंधित है जो यह लिखता है।
आईओएस के पास "डिस्क" के लिए एक भौतिक लिखने से बचने का कोई मौका नहीं है अगर एक भी मूल्य बदल गया है, बस डेटा अखंडता रखने के लिए। UserDefaults के संबंध में यह पूरी फाइल डिस्क पर फिर से लिखा गया है।
यह "डिस्क" को शक्ति देता है और इसे लंबे समय तक संचालित रखता है और आईओएस को कम बिजली की स्थिति में जाने से रोकता है।
इस पोस्ट से उपयोगकर्ता मोहम्मद रज़ा फ़रहानी द्वारा बताई गई कुछ अन्य बातों पर ध्यान दें, जो कि यूजरडिफॉल्ट्स की अतुल्यकालिक और तुल्यकालिक प्रकृति है।
जब आप एक डिफ़ॉल्ट मान सेट करते हैं, तो यह आपकी प्रक्रिया के भीतर, और अतुल्यकालिक रूप से लगातार भंडारण और अन्य प्रक्रियाओं में बदल जाता है।
उदाहरण के लिए यदि आप प्रोग्राम को सहेजते हैं और जल्दी से बंद करते हैं तो आप देख सकते हैं कि यह परिणाम नहीं बचाता है, ऐसा इसलिए है क्योंकि यह अतुल्यकालिक रूप से जारी है। आप इसे हर समय नोटिस नहीं कर सकते हैं, इसलिए यदि आप प्रोग्राम को छोड़ने से पहले बचत करने की योजना बनाते हैं, तो आप इसे समाप्त करने के लिए कुछ समय देकर इसके लिए जिम्मेदार हो सकते हैं।
हो सकता है कि किसी के पास इसके कुछ अच्छे समाधान हों जो वे टिप्पणियों में साझा कर सकें?