web-dev-qa-db-ja.com

Xcode 8およびiOS 10でNSUserDefaultsを使用する

NSUserDefaultsはiOS 10 SDKのクラスではなくなりました:

let defaults = NSUserDefaults.standardUserDefaults()

これはコンパイルに失敗します。このクラスは削除されましたか?

(これは、重複した質問の洪水を防ぐための標準的なQ&Aペアです)

29
JAL

NSUserDefaultsUserDefaultsに名前が変更されました。 standardUserDefaults()standard()に名前が変更されました。

let defaults = UserDefaults.standard

これで動作します。

プレリリースドキュメントリンク

47
JAL

Swift-3でUserDefaultsをより正確に使用するには:-

       //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

@JALの答えは正しいが、おそらく具体的すぎる。

APIのLotsは、Swift 3.で名前が変更されました。ほとんどのFoundationタイプ(その中のNSUserDefaults))は両方ともNSプレフィックスを失い、メソッドがありました- 改名 反映 Swift 3 APIガイドライン 。Foundationは、基本的なデータ型クラス(NSURLNSIndexPathNSDateなど)の束をSwift-nativeと「置き換え」* 値の種類URLIndexPathDateなど)。メソッドの名前変更は、アプリで使用する他のCocoa/Cocoa Touch APIにも適用されます。

これらの問題を1行ずつ1つずつ対処することは、確実に狂気に陥る方法です。 プロジェクトをSwift 3)に移動するときに最初に行うことは、編集>変換>現在にSwift Syntax)メニューバーから。これにより、1行のコードが複数の変更の影響を受けます(したがって、それらに個別に対処することで、目的の場所に移動できない場合があります)。

*対応するNSクラスは必要な場合に対応するため、「置換」を引用符で囲みますが、それらを使用するAPIは代わりに新しい値の型を参照します。 tableView(_:cellForRowAt:) は、IndexPathではなく、NSIndexPathを取ります。

16
rickster