Utilisation de NSUserDefaults avec Xcode 8 et iOS 10

NSUserDefaults ne semble plus être une class dans le SDK iOS 10:

 let defaults = NSUserDefaults.standardUserDefaults() 

Cela échoue à comstackr. Ce cours a-t-il été supprimé?

(Ceci est une paire canonique Q & A pour éviter le flot de questions en double)

NSUserDefaults a été renommé UserDefaults . standardUserDefaults() a été renommé en standard() .

 let defaults = UserDefaults.standard 

Cela fonctionne maintenant.

Lien de documentation avant la publication .

Pour être plus précis à utiliser UserDefaults dans Swift-3: –

  //To save the ssortingng let userDefaults = UserDefaults.standard userDefaults.set( "Ssortingng", forKey: "Key") //To resortingeve from the key let userDefaults = UserDefaults.standard let value = userDefaults.ssortingng(forKey: "Key") print(value) 

La réponse de JAL @ est correcte, mais peut-être trop spécifique.

Beaucoup d'API ont été renommées dans Swift 3. La plupart des types Foundation ( NSUserDefaults parmi eux) ont tous les deux perdu leur préfixe NS et leurs methods ont été renommées pour refléter les directives de l'API Swift 3 . Foundation "remplace" * un groupe de ses classs de types de données de base ( NSIndexPath , NSDate , NSDate , etc.) avec des types de valeur Swift-native ( URL , IndexPath , Date , etc.). La méthode de changement de nom s'applique également à toutes les autres API Cocoa / Cocoa Touch que vous utilisez dans votre application.

Traiter ces problèmes un par un, ligne par ligne, est un moyen sûr de faire de la folie. La première chose à faire lorsque vous déplacez un projet vers Swift 3 est de choisir Edition> Convertir> Vers la syntaxe Swift actuelle dans la barre de menu. Cela s'appliquera à tous les changements à la fois, y compris les cas où une ligne de code est affectée par plusieurs changements (et donc les adresser individuellement peut ne pas vous amener où vous pensez que vous allez).

* Je mets "remplace" entre guillemets parce que les classs NS correspondantes sont toujours là pour les cas où vous pourriez en avoir besoin, mais toute API qui les utilise fait reference aux nouveaux types de valeur à la place: eg tableView(_:cellForRowAt:) prend maintenant un IndexPath , pas un NSIndexPath .