Swift 5+
Keine der Antworten behandelt die im Standard integrierten lokalen Speicherfunktionen wirklich im Detail. Es kann weit mehr als nur Saiten.
Sie haben die folgenden Optionen direkt aus der Apple-Dokumentation, um Daten aus den Standardeinstellungen abzurufen.
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.
Hier sind die Optionen für die Einstellung
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.
Wenn Dinge wie Einstellungen und keine großen Daten gespeichert werden setzen diese sind völlig in Ordnung Optionen.
Doppelbeispiel :
Rahmen:
let defaults = UserDefaults.standard
var someDouble:Double = 0.5
defaults.set(someDouble, forKey: "someDouble")
Bekommen:
let defaults = UserDefaults.standard
var someDouble:Double = 0.0
someDouble = defaults.double(forKey: "someDouble")
Das Interessante an einem der Getter ist dictionaryRepresentation . Dieser praktische Getter verwendet alle Ihre Datentypen, unabhängig davon, um welche es sich handelt, und fügt sie in ein schönes Wörterbuch ein, auf das Sie über den Namen der Zeichenfolge zugreifen können, und gibt den richtigen Datentyp an, wenn Sie danach fragen es zurück, da es vom Typ 'any' ist .
Sie können Ihre eigenen Klassen und Objekte auch mit func set(Any?, forKey: String)
und speichernfunc object(forKey: String) -> Any?
dementsprechend Setter und Getter.
Ich hoffe, dies verdeutlicht die Leistungsfähigkeit der UserDefaults-Klasse zum Speichern lokaler Daten.
In Anbetracht dessen, wie viel Sie speichern sollten und wie oft, gab Hardy_Germany in diesem Beitrag eine gute Antwort darauf . Hier ist ein Zitat daraus
Wie viele bereits erwähnt haben: Mir ist keine Größenbeschränkung (außer physischem Speicher) zum Speichern von Daten in einer .plist bekannt (z. B. UserDefaults). Es geht also nicht darum, wie viel.
Die eigentliche Frage sollte sein, wie oft Sie neue / geänderte Werte schreiben ... Und dies hängt mit dem Batterieverbrauch zusammen, den diese Schreibvorgänge verursachen.
IOS hat keine Chance, ein physisches Schreiben auf "Festplatte" zu vermeiden, wenn sich ein einzelner Wert ändert, nur um die Datenintegrität zu gewährleisten. In Bezug auf UserDefaults führt dies dazu, dass die gesamte Datei auf die Festplatte umgeschrieben wird.
Dies schaltet die "Festplatte" ein und hält sie länger eingeschaltet und verhindert, dass IOS in den Energiesparmodus wechselt.
Etwas anderes zu beachten, wie von Benutzer Mohammad Reza Farahani in diesem Beitrag erwähnt, ist die asynchrone und synchrone Natur von userDefaults.
Wenn Sie einen Standardwert festlegen, wird dieser synchron in Ihrem Prozess und asynchron in persistenten Speicher und andere Prozesse geändert.
Wenn Sie beispielsweise das Programm speichern und schnell schließen, werden Sie möglicherweise feststellen, dass die Ergebnisse nicht gespeichert werden. Dies liegt daran, dass es asynchron fortbesteht. Möglicherweise bemerken Sie dies nicht immer. Wenn Sie also vor dem Beenden des Programms speichern möchten, sollten Sie dies berücksichtigen, indem Sie ihm etwas Zeit zum Beenden geben.
Vielleicht hat jemand ein paar nette Lösungen dafür, die er in den Kommentaren teilen kann?