NSUserDefaults
ne semble plus être une classe dans le SDK iOS 10:
let defaults = NSUserDefaults.standardUserDefaults()
Cela ne parvient pas à compiler. Cette classe a-t-elle été supprimée?
(Il s'agit d'une paire de questions et réponses canoniques pour éviter le flot de questions en double)
NSUserDefaults
a été renommé UserDefaults
. standardUserDefaults()
a été renommé standard()
.
let defaults = UserDefaults.standard
Cela fonctionne maintenant.
Pour être plus précis, utilisez UserDefaults dans Swift-3: -
//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)
@ La réponse de JAL est correcte, mais peut-être trop précise.
Beaucoup de l'API a été renommé en Swift 3. La plupart des types de Fondation (NSUserDefaults
parmi eux) ont tous deux perdu leur NS
préfixe et avait leurs méthodes renommé pour refléter Lignes directrices de l'API Swift . Foundation "remplace" également * un tas de ses classes de types de données de base (NSURL
, NSIndexPath
, NSDate
, etc.) avec Swift-native types de valeur (URL
, IndexPath
, Date
, 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 devenir fou. La première chose que vous faites lorsque vous déplacez un projet vers Swift 3 doit être de choisir Modifier> Convertir> En courant Swift Syntaxe dans la barre de menus. Ceci appliquera toutes les modifications à la fois, y compris les cas où une ligne de code est affecté par plusieurs changements (et donc les traiter individuellement ne vous mènera peut-être pas où vous pensez que vous allez).
* Je mets "remplace" entre guillemets parce que les classes NS
correspondantes sont toujours là pour les cas où vous pourriez en avoir besoin, mais toute API qui les utilise fait référence aux nouveaux types de valeur à la place: par exemple tableView(_:cellForRowAt:)
prend maintenant un IndexPath
, pas un NSIndexPath
.