Einstellungen speichern mittels UserDefaults

Eine der häufigsten Anforderungen an eine App ist das Speichern von individuellen Nutzereinstellungen. Egal, ob es hierbei um kosmetische Anpassungen wie ein individuelles App-Icon oder unterschiedliche Themes innerhalb einer App oder interne Daten wie Kontaktinformationen geht: Irgendwie müssen diese Informationen gespeichert und zur späteren Verwendung ausgelesen werden.

Für Apple Developer bietet sich für derartige Szenarien seit jeher die Klasse UserDefaults (ehemals NSUserDefaults, unter Objective-C trägt sie noch immer diesen Namen) an. Sie fungiert als Interface zu einer App-internen Datenbank, in der alle Nutzereinstellungen gespeichert werden. Diese Einstellungen werden hierbei in Form von Key-Value-Paaren abgebildet. UserDefaults bietet passende Methoden, um Daten in diese Datenbank zu schreiben und aus ihr auszulesen. Die Klasse ist hierbei als Singleton konzipiert, auf das über die Type Property standard zugegriffen werden kann.

Einstellungen speichern

Die Klasse UserDefaults bringt verschiedene Methoden mit, um Einstellungen zu speichern. Diese Methoden sind immer gleich aufgebaut und erwarten den zu speichernden Wert und einen zugehörigen Schlüssel, über den die entsprechende Einstellung auch ausgelesen werden kann. All diese Methoden tragen den Namen set(_:forKey:) und erwarten unterschiedliche Parameter für den zu speichernden Wert. Eine Methode nimmt einen Float-Parameter entgegen, eine andere einen Int und wieder eine andere einen Double. Welche Methoden es genau gibt, verrät die Dokumentation. Da es auch eine Variante der Methode mit einem Parameter vom Typ Any? gibt, könnt ihr aber letztlich jede Art von Information über UserDefaults speichern.

In der Dokumentation zu „UserDefaults“ findet man die verschiedenen Methoden zur Speicherung von Einstellungen.
In der Dokumentation zu „UserDefaults“ findet man die verschiedenen Methoden zur Speicherung von Einstellungen.

Die Schlüssel könnt ihr selbst frei festlegen. Es handelt sich bei ihnen um Strings, die ihr idealerweise in globalen Konstanten speichert und aufruft, um mögliche Tippfehler beim Zugriff auf eine Einstellung zu verhindern.

Ein simples Beispiel, wie die Speicherung einer Einstellung mittels UserDefaults erfolgen kann, zeigt das folgende Listing. Darin wird zunächst ein Schlüssel in der Konstanten firstNameKey definiert. Der dient dazu, den Vornamen eines Nutzers persistent in einer App zu speichern. Anschließend wird auf das Singleton von UserDefaults über die standard-Type Property zugegriffen und auf ihr die set(_:forKey:)-Methode mit den gewünschten Informationen aufgerufen.

let firstNameKey = "FirstName"
let userDefaults = UserDefaults.standard
userDefaults.set("Thomas", forKey: firstNameKey)

Einstellungen auslesen

Um auf gespeicherte Informationen innerhalb einer App zuzugreifen, geht ihr analog zur Speicherung vor. Statt der verschiedenen Setter-Methoden stellt euch die Klasse UserDefaults für diesen Zweck mehrere Getter-Methoden zur Verfügung, die als Parameter den Schlüssel der Einstellung erwarten, deren Wert ihr erhalten möchtet. Diese Getter-Methoden besitzen alle unterschiedliche Namen, abhängig davon, welchen Wert ihr auslesen möchtet. string(forKey:) beispielsweise liefert euch einen String zurück, bool(forKey:) ein Boolean oder integer(forKey:) einen Integer. Als eierlegende Wollmilchsau lässt sich die Methode object(forKey:) nutzen, die euch eine Instanz vom Typ Any? zurückliefert. Das Ergebnis müsst ihr entsprechend noch in den konkreten Typ, den ihr erwartet, casten.

Über die verschiedenen Getter-Methoden der Klasse „UserDefaults“ könnt ihr auf gespeicherte Einstellungen zurückgreifen.
Über die verschiedenen Getter-Methoden der Klasse „UserDefaults“ könnt ihr auf gespeicherte Einstellungen zurückgreifen.

Das folgende Listing zeigt, wie sich der zuvor gespeicherte String mithilfe der Getter-Methode string(forKey:) wieder auslesen und einer Konstanten zuweisen lässt.

let firstName = userDefaults.string(forKey: firstNameKey)

Fazit

Die Klasse UserDefaults lässt sich simpel bedienen und erlaubt die unkomplizierte Speicherung von Nutzereinstellungen. Mithilfe einer Setter-Methode wird eine Einstellung gespeichert und mittels passender Getter-Methoden wieder ausgelesen; fertig! Nur große Datenmengen haben bei der Arbeit mit UserDefaults nichts zu suchen. Die sollten innerhalb einer zusätzlichen Datenbank oder direkt lokal als Dateien im Dateiverzeichnis einer App gespeichert werden.

Euer Thomas


Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert