如何使用 UserDefault 在 Swift 中保存/检索字符串、布尔值和其他数据?
//Save NSUserDefaults.standardUserDefaults().setObject("yourString", forKey: "YourStringKey") //retrive let yourStr : AnyObject? = NSUserDefaults.standardUserDefaults().objectForKey("YourStringKey")
档号: NSUserdefault objectType
商店
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")
RegisterDefault: 将 registrationDictionary 添加到每个搜索列表中的最后一项。这意味着在 NSUserDefault 在每个其他有效位置查找值之后,它将查找已注册的默认值,这使它们作为“回退”值非常有用。已注册的默认值从不存储在应用程序的运行之间,而且只对注册它们的应用程序可见。 默认配置文件中的默认值将自动注册。
RegisterDefault: 将 registrationDictionary 添加到每个搜索列表中的最后一项。这意味着在 NSUserDefault 在每个其他有效位置查找值之后,它将查找已注册的默认值,这使它们作为“回退”值非常有用。已注册的默认值从不存储在应用程序的运行之间,而且只对注册它们的应用程序可见。
默认配置文件中的默认值将自动注册。
例如,从启动开始检测应用程序,创建保存启动的结构
struct DetectLaunch { static let keyforLaunch = "validateFirstlunch" static var isFirst: Bool { get { return UserDefaults.standard.bool(forKey: keyforLaunch) } set { UserDefaults.standard.set(newValue, forKey: keyforLaunch) } } }
在应用程序启动时注册默认值:
UserDefaults.standard.register(defaults: [ DetectLaunch.isFirst: true ])
删除应用程序终止时的值:
func applicationWillTerminate(_ application: UIApplication) { DetectLaunch.isFirst = false }
并检查条件为
if DetectLaunch.isFirst { // app launched from first }
另一个属性 套房名称,主要用于 应用程序群组概念,这是我从 给你获得的示例场景:
这个用例是我想用一个标识符来分离我的 UserDefault (不同的业务逻辑可能需要 Userdefault 被单独分组) ,就像 Android 的 SharedPreferences 一样。例如,当一个用户在我的应用程序点击注销按钮,我想清除他的帐户相关的默认值,但不位置的设备。
let user = UserDefaults(suiteName:"User")
使用 userDefault sync ,详细信息已添加到重复的答案中。
你可以这样快速地使用 NSUserDefaults,
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 }
使用 用户默认值的最佳方法
步骤
样本
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 UserDefaultsKeys : String { case isLoggedIn case userID }
在需要的位置保存 UserDefault
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)
这样可以最好地存储原始数据
更新 不需要使用 synize ()来存储值。正如@Moritz 指出的那样,这是没有必要的,并给出了相关的文章。查看评论以了解更多细节
我正常地保存了 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
斯威夫特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")
在类 A中,为键设置值:
A
let text = "hai" UserDefaults.standard.setValue(text, forKey: "textValue")
在类 B中,使用类 A中声明的键获取文本的值,并将其分配给您需要的相应变量:
B
var valueOfText = UserDefaults.value(forKey: "textValue")
斯威夫特4号, 我使用 Enum 来处理 UserDefault。
这只是一个示例代码,您可以根据自己的需求对其进行定制。
用于存储,检索,删除。 这样,只需将 UserDefault 键的键添加到枚举中。 根据 dataType 和您的需求获取和存储值时处理值。
enum UserDefaultsConstant : String { case AuthToken, FcmToken static let defaults = UserDefaults.standard //Store func setValue(value : Any) { switch self { case .AuthToken,.FcmToken: if let _ = value as? String { UserDefaults.standard.set(value, forKey: self.rawValue) } break } UserDefaults.standard.synchronize() } //Retrieve func getValue() -> Any? { switch self { case .AuthToken: if(UserDefaults.standard.value(forKey: UserDefaultsConstant.AuthToken.rawValue) != nil) { return "Bearer "+(UserDefaults.standard.value(forKey: UserDefaultsConstant.AuthToken.rawValue) as! String) } else { return "" } case .FcmToken: if(UserDefaults.standard.value(forKey: UserDefaultsConstant.FcmToken.rawValue) != nil) { print(UserDefaults.standard.value(forKey: UserDefaultsConstant.FcmToken.rawValue)) return (UserDefaults.standard.value(forKey: UserDefaultsConstant.FcmToken.rawValue) as! String) } else { return "" } } } //Remove func removeValue() { UserDefaults.standard.removeObject(forKey: self.rawValue) UserDefaults.standard.synchronize() } }
为了在用户默认值中存储值,
if let authToken = resp.data?.token { UserDefaultsConstant.AuthToken.setValue(value: authToken) }
为了从 userdefault 中检索值,
//As AuthToken value is a string (UserDefaultsConstant.AuthToken.getValue() as! String)
class UserDefaults_FavoriteQuote { static let key = "appname.favoriteQuote" 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) } } } }
我会说 安部的回答非常好,但是我必须在获取首选项的同时添加约束,这样我的程序才不会失败
下面是 Swift 5中更新的代码片段
在 UserDefault 中存储数据
@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 }
从 UserDefault 获取数据
@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")) }
迅捷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]()
:)
UserDefault + Helper.swift
import UIKit private enum Defaults: String { case countryCode = "countryCode" case userloginId = "userloginid" } final class UserDefaultHelper { static var countryCode: String? { set{ _set(value: newValue, key: .countryCode) } get { return _get(valueForKay: .countryCode) as? String ?? "" } } static var userloginId: String? { set{ _set(value: newValue, key: .userloginId) } get { return _get(valueForKay: .userloginId) as? String ?? "" } } private static func _set(value: Any?, key: Defaults) { UserDefaults.standard.set(value, forKey: key.rawValue) } private static func _get(valueForKay key: Defaults)-> Any? { return UserDefaults.standard.value(forKey: key.rawValue) } static func deleteCountryCode() { UserDefaults.standard.removeObject(forKey: Defaults.countryCode.rawValue) } static func deleteUserLoginId() { UserDefaults.standard.removeObject(forKey: Defaults.userloginId.rawValue) } }
用法:
节约价值:
UserDefaultHelper.userloginId = data["user_id"] as? String
取值:
let userloginid = UserDefaultHelper.userloginId
删除值:
UserDefaultHelper.deleteUserLoginId()
我已经为 Userdefualts 的商店数据创建了自定义函数
//******************* REMOVE NSUSER DEFAULT ******************* func removeUserDefault(key:String) { UserDefaults.standard.removeObject(forKey: key); } //******************* SAVE STRING IN USER DEFAULT ******************* func saveInDefault(value:Any,key:String) { UserDefaults.standard.setValue(value, forKey: key); UserDefaults.standard.synchronize(); } //******************* FETCH STRING FROM USER DEFAULT ******************* func fetchString(key:String)->AnyObject { if (UserDefaults.standard.object(forKey: key) != nil) { return UserDefaults.standard.value(forKey: key)! as AnyObject; } else { return "" as AnyObject; } }
使用 UserDefault 存储任何设置值,你希望你的应用程序在启动之间记住,也许你想知道它是否以前启动过,也许你想要一些值,用户已经设置为记住,所以他们不需要设置很长时间,在 Mac 窗口框架存储在那里为你,也许你想控制应用程序的行为,但你不想它可用于最终用户,你只是想在你的发布之前选择。小心存储在 UserDefault 中的内容,它不受保护。