如何使用UserDefaults在Swift中保存/检索字符串,布尔值和其他数据?
答案 0 :(得分:255)
商品强>
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")
另一个属性suite name,主要用于App Groups concept,我从here获取的示例方案:
用例是我想将我的UserDefaults(不同的业务逻辑可能要求UserDefaults分开分组)与Android的SharedPreferences之类的标识符分开。例如,当我的应用程序中的用户点击退出按钮时,我想清除他的帐户相关默认值,但不清除设备的位置。
let user = UserDefaults(suiteName:"User")
use of userDefaults synchronize,详细信息已添加到重复的答案中。
答案 1 :(得分:22)
使用 UserDefaults
的最佳方式<强>步骤强>
示例
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
}
保存在UserDefaults 您想要的地方
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指出它没有必要并且给出了关于它的文章。查看更多细节的评论
答案 2 :(得分:10)
Swift 4 :
商品强>
UserDefaults.standard.set(object/value, forKey: "key_name")
<强> Retrive 强>
var returnValue: [datatype]? = UserDefaults.standard.object(forKey: "key_name") as? [datatype]
删除强>
UserDefaults.standard.removeObject(forKey:"key_name")
答案 3 :(得分:2)
你可以用这种方式使用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
}
答案 4 :(得分:1)
//Save
NSUserDefaults.standardUserDefaults().setObject("yourString", forKey: "YourStringKey")
//retrive
let yourStr : AnyObject? = NSUserDefaults.standardUserDefaults().objectForKey("YourStringKey")
答案 5 :(得分:1)
我正常保存了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
答案 6 :(得分:0)
在A
类中,设置键的值:
let text = "hai"
UserDefaults.standard.setValue(text, forKey: "textValue")
在类B
中,使用在类A
中声明的键获取文本的值,并将其分配给所需的各个变量:
var valueOfText = UserDefaults.value(forKey: "textValue")
答案 7 :(得分:0)
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)
}
}
}
}
答案 8 :(得分:0)
我会说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"))
}
答案 9 :(得分:0)
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]()
:)
答案 10 :(得分:0)
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()
答案 11 :(得分:0)
我在 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;
}
}
答案 12 :(得分:-1)
迅速4, 我已使用Enum处理UserDefaults。
这只是示例代码。您可以根据需要自定义它。
用于存储,检索,卸下。 这样,只需将您的UserDefaults键的键添加到枚举即可。 根据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)
}
要从userdefaults中检索值,
//As AuthToken value is a string
(UserDefaultsConstant.AuthToken.getValue() as! String)