Swift 5+
Yanıtların hiçbiri, varsayılan olarak yerleşik yerel depolama yeteneklerini ayrıntılı olarak kapsamıyor. Dizelerden çok daha fazlasını yapabilir .
Varsayılanlardan veri 'almak' için doğrudan apple belgelerinde bulunan aşağıdaki seçeneklere sahipsiniz.
func object(forKey: String) -> Any?
func url(forKey: String) -> URL?
func array(forKey: String) -> [Any]?
func dictionary(forKey: String) -> [String : Any]?
func string(forKey: String) -> String?
func stringArray(forKey: String) -> [String]?
func data(forKey: String) -> Data?
func bool(forKey: String) -> Bool
func integer(forKey: String) -> Int
func float(forKey: String) -> Float
func double(forKey: String) -> Double
func dictionaryRepresentation() -> [String : Any]
İşte 'ayar' için seçenekler
func set(Any?, forKey: String)
func set(Float, forKey: String)
func set(Double, forKey: String)
func set(Int, forKey: String)
func set(Bool, forKey: String)
func set(URL?, forKey: String)
Tercihler gibi şeyler depoluyorsanız ve büyük bir veri kümesi yoksa, bunlar mükemmel seçeneklerdir.
Çift Örnek :
Ayar:
let defaults = UserDefaults.standard
var someDouble:Double = 0.5
defaults.set(someDouble, forKey: "someDouble")
Başlarken:
let defaults = UserDefaults.standard
var someDouble:Double = 0.0
someDouble = defaults.double(forKey: "someDouble")
Alıcılardan biri hakkında ilginç olan, sözlük Temsilcisi , bu kullanışlı alıcı, ne olduklarına bakılmaksızın tüm veri türlerinizi alacak ve bunları dize adıyla erişebileceğiniz ve istediğinizde doğru karşılık gelen veri türünü verebileceğiniz güzel bir sözlüğe koyacaktır. o türden beri geri döndü 'herhangi' .
Kendi sınıflarınızı ve nesnelerinizi ayrıca func set(Any?, forKey: String)
vefunc object(forKey: String) -> Any?
ayarlayıcı ve alıcıyı buna göre .
Umarım bu, UserDefaults sınıfının yerel verileri depolamak için gücünü daha fazla açıklığa kavuşturur.
Ne kadar ve ne sıklıkla saklamanız gerektiğine ilişkin olarak Hardy_Germany bu yazıda buna iyi bir cevap verdi , işte ondan bir alıntı
Daha önce de belirtildiği gibi: Verileri bir .plist (örn. UserDefaults) içinde depolamak için herhangi bir SIZE sınırlamasından (fiziksel bellek dışında) haberdar değilim. Yani bu NE KADAR sorusu değil.
Asıl soru NASIL yeni / değiştirilmiş değerler yazmanız olmalıdır ... Ve bu, yazının neden olacağı pil boşalmasıyla ilgilidir.
IOS, veri bütünlüğünü korumak için tek bir değerin değişmesi durumunda "diske" fiziksel bir yazmayı engelleme şansına sahip değildir. UserDefaults ile ilgili olarak bu, tüm dosyanın diske yeniden yazılmasına neden olur.
Bu, "diski" çalıştırır ve daha uzun süre açık kalmasını sağlar ve IOS'nin düşük güç durumuna geçmesini önler.
Bu kullanıcı Mohammad Reza Farahani tarafından belirtildiği gibi nota başka bir şey mesaja olduğunu asenkron ve senkron userDefaults doğası.
Varsayılan bir değer belirlediğinizde, işleminiz içinde eşzamanlı olarak ve eşzamansız olarak kalıcı depolama ve diğer işlemlerle değiştirilir.
Örneğin, programı kaydeder ve hızlı bir şekilde kapatırsanız, sonuçları kaydetmediğini fark edebilirsiniz, bunun nedeni, eşzamansız olarak devam etmesidir. Bunu her zaman fark etmeyebilirsiniz, bu nedenle programdan çıkmadan önce tasarruf etmeyi planlıyorsanız, bitirmesi için biraz zaman vererek bunu hesaba katmak isteyebilirsiniz.
Belki birinin bunun için yorumlarda paylaşabileceği güzel çözümleri vardır?