Swiftで文字列、ブール値、その他のデータを保存/取得するためにUserDefaultsを使用するにはどうすればよいですか?
ref: NSUserdefault objectTypes
店舗
UserDefaults.standard.set(true, forKey: "Key") //Bool
UserDefaults.standard.set(1, forKey: "Key") //Integer
UserDefaults.standard.set("TEST", forKey: "Key") //setObject
取得
UserDefaults.standard.bool(forKey: "Key")
UserDefaults.standard.integer(forKey: "Key")
UserDefaults.standard.string(forKey: "Key")
削除
UserDefaults.standard.removeObject(forKey: "Key")
すべてのキーを削除
if let appDomain = Bundle.main.bundleIdentifier {
UserDefaults.standard.removePersistentDomain(forName: appDomain)
}
店舗
NSUserDefaults.standardUserDefaults().setObject(newValue, forKey: "yourkey")
NSUserDefaults.standardUserDefaults().synchronize()
取得
var returnValue: [NSString]? = NSUserDefaults.standardUserDefaults().objectForKey("yourkey") as? [NSString]
削除
NSUserDefaults.standardUserDefaults().removeObjectForKey("yourkey")
もう1つのプロパティ スイート名 、ほとんどが アプリケーショングループの概念 、シナリオ例I こちら からの引用:
ユースケースは、AndroidのSharedPreferencesとまったく同じように、私のUserDefaults(異なるビジネスロジックではUserdefaultsを別々にグループ化する必要がある場合があります)を識別子で区切ることです。たとえば、私のアプリのユーザーがログアウトボタンをクリックしたとき、私は自分のアカウント関連のデフォルトをクリアしたいがデバイスの場所はクリアしたくないでしょう。
let user = UserDefaults(suiteName:"User")
userDefaultsの使用同期 、詳細情報が重複する回答に追加されました。
最良の使用方法serDefaults
ステップ
サンプル
extension UserDefaults{
//MARK: Check Login
func setLoggedIn(value: Bool) {
set(value, forKey: UserDefaultsKeys.isLoggedIn.rawValue)
//synchronize()
}
func isLoggedIn()-> Bool {
return bool(forKey: UserDefaultsKeys.isLoggedIn.rawValue)
}
//MARK: Save User Data
func setUserID(value: Int){
set(value, forKey: UserDefaultsKeys.userID.rawValue)
//synchronize()
}
//MARK: Retrieve User Data
func getUserID() -> Int{
return integer(forKey: UserDefaultsKeys.userID.rawValue)
}
}
enumデータの保存に使用されるキーの場合
enum UserDefaultsKeys : String {
case isLoggedIn
case userID
}
serDefaultsに保存あなたが望むところ
UserDefaults.standard.setLoggedIn(value: true) // String
UserDefaults.standard.setUserID(value: result.User.id!) // String
データの取得アプリ内の任意の場所
print("ID : \(UserDefaults.standard.getUserID())")
UserDefaults.standard.getUserID()
値を削除
UserDefaults.standard.removeObject(forKey: UserDefaultsKeys.userID)
これにより、プリミティブデータを最高の状態で保存できます。
更新値を保存するのにsynchronize()を使う必要はありません。 @Moritzがそれを不要と指摘し、それについての記事を書いたように。詳細についてはコメントをチェックする
Swift 4:
店舗
UserDefaults.standard.set(object/value, forKey: "key_name")
回収
var returnValue: [datatype]? = UserDefaults.standard.object(forKey: "key_name") as? [datatype]
削除
UserDefaults.standard.removeObject(forKey:"key_name")
このようにSwiftでNSUserDefaults
を使うことができます、
@IBAction func writeButton(sender: UIButton)
{
let defaults = NSUserDefaults.standardUserDefaults()
defaults.setObject("defaultvalue", forKey: "userNameKey")
}
@IBAction func readButton(sender: UIButton)
{
let defaults = NSUserDefaults.standardUserDefaults()
let name = defaults.stringForKey("userNameKey")
println(name) //Prints defaultvalue in console
}
Swift 5以上
let defaults = UserDefaults.standard
defaults.set(25, forKey: "Age")
let savedInteger = defaults.integer(forKey: "Age")
defaults.set(true, forKey: "UseFaceID")
let savedBoolean = defaults.bool(forKey: "UseFaceID")
defaults.set(CGFloat.pi, forKey: "Pi")
defaults.set("Your Name", forKey: "Name")
defaults.set(Date(), forKey: "LastRun")
let array = ["Hello", "World"]
defaults.set(array, forKey: "SavedArray")
let savedArray = defaults.object(forKey: "SavedArray") as? [String] ?? [String()
let dict = ["Name": "Your", "Country": "YourCountry"]
defaults.set(dict, forKey: "SavedDict")
let savedDictionary = defaults.object(forKey: "SavedDictionary") as? [String: String] ?? [String: String]()
:)
私はNSDictionaryを普通に保存し、それを正しく取得することができました。
dictForaddress = placemark.addressDictionary! as NSDictionary
let userDefaults = UserDefaults.standard
userDefaults.set(dictForaddress, forKey:Constants.kAddressOfUser)
// NSDictionaryからデータを取得します。
let userDefaults = UserDefaults.standard
let dictAddress = userDefaults.object(forKey: Constants.kAddressOfUser) as! NSDictionary
//Save
NSUserDefaults.standardUserDefaults().setObject("yourString", forKey: "YourStringKey")
//retrive
let yourStr : AnyObject? = NSUserDefaults.standardUserDefaults().objectForKey("YourStringKey")
class UserDefaults_WorstPresidentName {
static let key = "appname.worstPresidentName"
static var value: String? {
get {
return UserDefaults.standard.string(forKey: key)
}
set {
if newValue != nil {
UserDefaults.standard.set(newValue, forKey: key)
} else {
UserDefaults.standard.removeObject(forKey: key)
}
}
}
}
私は言うでしょう Anbu's answer 完璧に結構ですが、プリファレンスを取得しながらプログラムを失敗させないためにガードを追加する必要がありました
これはSwift 5に更新されたコードの断片です。
設定にデータを保存する
@IBAction func savePreferenceData(_ sender: Any) {
print("Storing data..")
UserDefaults.standard.set("RDC", forKey: "UserName") //String
UserDefaults.standard.set("TestPass", forKey: "Passowrd") //String
UserDefaults.standard.set(21, forKey: "Age") //Integer
}
設定からデータを取得する
@IBAction func fetchPreferenceData(_ sender: Any) {
print("Fetching data..")
//added guard
guard let uName = UserDefaults.standard.string(forKey: "UserName") else { return }
print("User Name is :"+uName)
print(UserDefaults.standard.integer(forKey: "Age"))
}
クラスA
で、keyに値を設定します。
let text = "hai"
UserDefaults.standard.setValue(text, forKey: "textValue")
クラスB
で、クラスA
で宣言したキーを使用してテキストの値を取得し、それを必要なそれぞれの変数に割り当てます。
var valueOfText = UserDefaults.value(forKey: "textValue")