31

NSUserDefaultsiOS 10 SDK のクラスではないようです。

let defaults = NSUserDefaults.standardUserDefaults()

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

(これは、重複した質問が殺到するのを防ぐための正規の Q&A ペアです)

4

3 に答える 3

47

NSUserDefaultsに改名されましたUserDefaultsstandardUserDefaults()に改名されましたstandard()

let defaults = UserDefaults.standard

これで動作します。

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

于 2016-06-13T20:17:26.653 に答える
20

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)
于 2016-11-24T12:23:08.107 に答える
16

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

API の多くは Swift 3 で名前が変更されました。ほとんどの Foundation 型 (NSUserDefaultsその中) は、NSプレフィックスが失われ、 Swift 3 API ガイドラインを反映するためにメソッドの名前が変更されました。Foundation はまた、一連の基本データ型クラス ( 、、など) を Swift ネイティブの値型( 、、など)に「置き換え」*ます。メソッドの名前変更は、アプリで使用する他の Cocoa / Cocoa Touch API にも適用されます。NSURLNSIndexPathNSDateURLIndexPathDate

これらの問題を 1 行 1 行ずつ処理することは、確実に狂気への道です。プロジェクトを Swift 3 に移行するときに最初に行うことは、メニュー バーから[編集] > [変換] > [現在の Swift 構文に変換]を選択することです。これにより、コードの 1 行が複数の変更によって影響を受ける場合を含め、すべての変更が一度に適用されます (したがって、それらに個別に対処しても、意図したとおりにならない可能性があります)。

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

于 2016-06-14T00:53:02.720 に答える