Die persönlichen Einstellungen und Präferenzen eines Nutzers zu speichern und zu laden ist seit OS X Version 10.0 eine Aufgabe, die von Programmierern gerne mit der Klasse NSUserDefaults umgesetzt wird. Seit der Version 2.0 steht die Klasse auch auf der iOS-Plattform zu Verfügung und somit ist es wenig überraschend, dass man bei der Entwicklung mit Swift nicht auf diesen bewährten Baustein verzichten wollte. Lediglich den Prefix NS hat man als überflüssig angesehen. In SwiftUI gibt es die Klasse selbstverständlich auch und die Art der Verwendung hat sich seit der Programmierung mit Objective-C nur wenig verändert. Lediglich die Syntax ist eine anderer. Auf jeden zu archivierende Wert wird über einen Namen (Key), als String, zugegriffen.
// Werte speichern
UserDefaults.standard.set(true, forKey: "BoolKey") //Bool
UserDefaults.standard.set(1, forKey: "IntKey") //Integer
UserDefaults.standard.set(3.1415, forKey: "DoubleKey") //Integer
UserDefaults.standard.set("Test", forKey: "StringKey") //String
// Werte Laden
let b = UserDefaults.standard.bool(forKey: "BoolKey")
let i = UserDefaults.standard.integer(forKey: "IntKey")
let d = UserDefaults.standard.double(forKey: "DoubleKey")
let s = UserDefaults.standard.string(forKey: "StringKey")
Diese Vorgehensweise ist nicht ideal. Damit das System funktioniert, darf sich auf keinen Fall ein Schreibfehler bei einem der Keys einschleichen. Ein gespeicherter Wert könnte dann nicht mehr zugeordnet werden. Leider können genau diese Fehler von einem Compiler nicht bemerkt werden.
Einfacher wurde das Leben für SwiftUI-Entwickler durch den Property Wrapper @AppStorage. Dort ist nur noch eine Definition nötig, bei der eine Variable fest mit einem Key, und somit einer zu archivierenden Einstellung, verbunden wird. Die Werte müssen auch nicht mehr explizit geladen und gespeichert werden. Veränderungen an einem Wert werden automatisch in den UserDefaults aktualisiert.
@AppStorage("BoolKey") var b: Bool = true
@AppStorage("IntKey") var i: Int = 1
@AppStorage("DoubleKey") var d: Double = 3.1415
@AppStorage("StringKey") var s: String = "Test"
Geschrieben am: 01.06.2020 Technologien: Swift, SwiftUI, macOS, iOS