web-dev-qa-db-de.com

Verwenden von NSUserDefaults mit Xcode 8 und iOS 10

NSUserDefaults scheint keine Klasse mehr im iOS 10 SDK zu sein:

let defaults = NSUserDefaults.standardUserDefaults()

Dies kann nicht kompiliert werden. Wurde diese Klasse entfernt?

(Dies ist ein kanonisches F & A-Paar, um die Flut von doppelten Fragen zu verhindern.)

29
JAL

NSUserDefaults wurde in UserDefaults umbenannt. standardUserDefaults() wurde in standard() umbenannt.

let defaults = UserDefaults.standard

Das funktioniert jetzt.

Link zur Vorabversion der Dokumentation .

47
JAL

m genauer zu sein, UserDefaults in Swift-3 zu verwenden: -

       //To save the string 
       let userDefaults = UserDefaults.standard
       userDefaults.set( "String", forKey: "Key")

       //To retrieve from the key
       let userDefaults = UserDefaults.standard
       let value  = userDefaults.string(forKey: "Key")
       print(value)
20
Shrawan

@ JALs Antwort ist richtig, aber vielleicht zu spezifisch.

Lots der API wurde in Swift umbenannt. 3. Die meisten Foundation-Typen (darunter NSUserDefaults) haben beide ihr NS-Präfix verloren und hatten es ihre Methoden mbenannt entsprechend Swift 3 API Guidelines . Foundation "ersetzt" * auch eine Reihe seiner grundlegenden Datentypklassen (NSURL, NSIndexPath, NSDate usw.) durch Swift-native Werttypen = (URL, IndexPath, Date, etc). Die Umbenennung der Methode gilt auch für alle anderen Cocoa/Cocoa Touch-APIs, die Sie in Ihrer App verwenden.

Sich Zeile für Zeile mit diesen Themen auseinanderzusetzen, ist ein sicherer Weg zum Wahnsinn. Wenn Sie ein Projekt als Erstes nach Swift verschieben, müssen Sie Bearbeiten> Konvertieren> In Aktuelles Swift Syntax auswählen aus der Menüleiste. Dadurch werden alle Änderungen auf einmal angewendet, einschließlich der Fälle, in denen eine Codezeile von mehreren Änderungen betroffen ist (und wenn Sie sie daher einzeln ansprechen, gelangen Sie möglicherweise nicht dahin, wo Sie denken, dass Sie hin wollen).

* Ich setze "Ersetzungen" in Anführungszeichen, da die entsprechenden Klassen NS für die Fälle, in denen Sie sie möglicherweise benötigen, immer noch vorhanden sind, aber jede API, die sie verwendet, verweist stattdessen auf die neuen Werttypen: z. tableView(_:cellForRowAt:) nimmt jetzt ein IndexPath, kein NSIndexPath.

16
rickster