2016-06-13 16 views
29

NSUserDefaults sembra più essere una classe in iOS SDK 10:Uso NSUserDefaults con Xcode 8 e iOS 10

let defaults = NSUserDefaults.standardUserDefaults() 

Questo non riesce a compilare. Questa classe è stata rimossa?

(Questa è una Q canonica & Un paio di impedire il flusso di domande duplicate)

risposta

47

NSUserDefaults è stato rinominato in UserDefaults. standardUserDefaults() è stato rinominato in standard().

let defaults = UserDefaults.standard 

Ora funziona.

Pre-release documentation link.

+6

Sembra che sarò have some fun riscrittura del codice passato. –

+0

@ JAL - una volta rese tali modifiche NSUserDefault conformi a Swift 3/ios10/Xcode 8, i valori correnti di tutti i nostri NSUserDefaults persistono ?? – Joe

+0

@Joe Sì, tutti i dati continueranno a persistere. Queste sono solo modifiche al nome della classe e della funzione. – JAL

16

@ La risposta di JAL è corretta, ma forse troppo specifica.

sacco di API preso rinominato a Swift 3. tipi più Foundation (NSUserDefaults tra di loro) hanno entrambi perso il loro prefisso NS e avevano i loro metodi renamed per riflettere Swift 3 API Guidelines. Foundation sostituisce anche alcune delle classi di tipi di dati di base (NSURL, NSIndexPath, NSDate, ecc.) Con Swift-native value types (URL, IndexPath, Date, ecc.). La ridenominazione del metodo si applica anche a tutte le altre API Cocoa/Cocoa Touch che utilizzi nella tua app.

Affrontare questi problemi uno per uno, riga dopo riga, è un modo sicuro per la follia. La prima cosa che fai quando sposti un progetto in Swift 3 dovrebbe essere quello di scegliere Modifica> Converti> in Sintassi Swift attuale dalla barra dei menu. Ciò applicherà tutte le modifiche contemporaneamente, inclusi i casi in cui una riga di codice è influenzata da più modifiche (e quindi indirizzarle individualmente potrebbe non portarti dove pensi di andare).

* Inserisco "sostituisce" tra virgolette perché le corrispondenti classi NS sono ancora disponibili per i casi in cui potrebbero essere necessarie, ma qualsiasi API che le utilizza fa riferimento invece ai nuovi tipi di valore: ad es. tableView(_:cellForRowAt:) ora prende uno IndexPath, non uno NSIndexPath.

+0

Grazie rickster.C'è una meta domanda sulla ridenominazione della classe in iOS 10 [qui] (http://meta.stackoverflow.com/q/326078/2415822). – JAL

20

Per essere più precisi da utilizzare UserDefaults a 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) 
+5

Non è necessario scrivere 'Foundation' prima di' UserDefaults' –

Problemi correlati