30 votes

À l'aide de NSUserDefaults avec Xcode 8 et iOS 10

NSUserDefaults ne semble plus être une classe à l'iOS 10 SDK:

let defaults = NSUserDefaults.standardUserDefaults()

Cela ne parvient pas à compiler. A cette classe supprimée?

(C'est un canoniques Q&Une paire pour empêcher l'inondation de dupliquer des questions)

47voto

JAL Points 3432

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

let defaults = UserDefaults.standard

Cela fonctionne à présent.

La pré-version de la documentation lien.

20voto

Shrawan Points 3435

Pour être plus précis à utiliser 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)

16voto

rickster Points 19870

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

Beaucoup d'API fut renommé en Swift 3. La plupart des types de base (NSUserDefaults d'entre eux) ont tous deux perdu leur NS préfixe, et ont vu leurs méthodes renommé pour refléter Swift 3 API lignes Directrices. Fondation "remplace"* un bouquet de ses données de base des classes de type (NSURL, NSIndexPath, NSDate, etc) avec Swift-native types de valeur (URL, IndexPath, Date, etc). La méthode de renommage s'applique également à tous les autres de Cacao / Cacao Touch Api que vous utilisez dans votre application.

Face à ces questions une par une, ligne par ligne, est un moyen sûr de la folie. La première chose à faire lorsque vous déplacez un projet Swift 3 devrait être de choisir Edition > Convertir > Pour Swift Actuel de la Syntaxe à partir de la barre de menu. Cela s'applique à tous les changements à la fois, y compris dans les cas où une seule ligne de code est affecté par de multiples changements (et donc de les traiter individuellement pourraient ne pas vous rendre où vous pensez que vous allez).

*J'ai mis "remplace" entre guillemets parce que l'correspondante NS des classes sont toujours là pour le cas où vous pourriez en avoir besoin, mais une API qui utilise se réfère à la nouvelle valeur plutôt les types: par exemple, tableView(_:cellForRowAt:) prend maintenant un IndexPath, pas un NSIndexPath.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X