如何在Swift中使用UserDefaults?
在Swift中,使用UserDefaults可以方便地存储和获取用户的偏好设置数据。然而,有时候会遇到一些问题,比如在存储数据之后,数据并没有被立即写入磁盘。这时候,可以使用UserDefaults的synchronize()方法来强制将数据立即写入磁盘。
下面是使用UserDefaults的一些常用操作:
存储数据:
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")
而对于这行代码UserDefaults.standard.synchronize()
,它是可选的,意思是可以选择是否调用这个方法。synchronize()方法的作用是将数据立即写入磁盘,而不是等到系统自动写入磁盘。通常情况下,系统会在适当的时机自动写入磁盘,所以我们不需要手动调用这个方法。但是,如果你希望立即将数据写入磁盘,可以调用这个方法。
希望这篇文章对你理解如何在Swift中使用UserDefaults有所帮助!
UserDefaults是一种用于存储应用程序数据的机制,可以在应用程序的各个部分之间共享数据。它是一个键值对存储,可以用来存储布尔值、整数和字符串等数据类型。
在Swift中,可以使用UserDefaults来存储、检索和删除数据。以下是在Swift 3及以上版本中使用UserDefaults的示例代码:
存储数据:
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)
}
在Swift 2及以下版本中使用UserDefaults的示例代码如下:
存储数据:
NSUserDefaults.standardUserDefaults().setObject(newValue, forKey: "yourkey")
NSUserDefaults.standardUserDefaults().synchronize()
检索数据:
var returnValue: [NSString]? = NSUserDefaults.standardUserDefaults().objectForKey("yourkey") as? [NSString]
删除数据:
NSUserDefaults.standardUserDefaults().removeObjectForKey("yourkey")
除了以上用法外,还可以使用UserDefaults的register方法来注册默认值,并可以通过UserDefaults的suite name属性设置UserDefaults的套件名称。
为了演示UserDefaults的用法,下面以一个应用程序的启动为例,创建了一个用于保存启动信息的结构体DetectLaunch,并注册了默认值:
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
])
在应用程序终止时,可以通过设置DetectLaunch.isFirst的值来删除该值:
func applicationWillTerminate(_ application: UIApplication) {
DetectLaunch.isFirst = false
}
最后,可以通过检查DetectLaunch.isFirst的值来判断应用程序是首次启动还是非首次启动。
另外,UserDefaults还提供了suite name属性,用于设置UserDefaults的套件名称。这个属性主要用于App Groups的概念,可以将UserDefaults的数据与其他应用程序共享。例如,可以通过以下代码创建一个带有套件名称的UserDefaults对象:
let user = UserDefaults(suiteName:"User")
最后,对于UserDefaults的存储方法,可以在应用程序关闭之前调用,也可以在值发生变化时调用。值得注意的是,UserDefaults始终只存储最终值。而对于数据是否在应用程序的安装和卸载中持久化存储,UserDefaults是会持久化存储的。
如何在Swift中使用UserDefaults?
UserDefaults是一种用于存储应用程序数据的机制。您可以使用UserDefaults在应用程序中保存和检索用户的偏好设置和其他简单的数据。下面是在Swift中使用UserDefaults的最佳方法:
步骤:
1. 创建UserDefaults的扩展
2. 创建一个包含需要存储在本地的键的枚举
3. 在任何您想要的地方存储和检索本地数据
示例:
extension UserDefaults{
//MARK: 检查登录
func setLoggedIn(value: Bool) {
set(value, forKey: UserDefaultsKeys.isLoggedIn.rawValue)
//synchronize()
}
func isLoggedIn()-> Bool {
return bool(forKey: UserDefaultsKeys.isLoggedIn.rawValue)
}
//MARK: 保存用户数据
func setUserID(value: Int){
set(value, forKey: UserDefaultsKeys.userID.rawValue)
//synchronize()
}
//MARK: 检索用户数据
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)
这样,您就可以在UserDefaults中存储原始数据。
更新:
您不需要使用synchronize()来存储值。如上所述,这是不必要的,而且可能会减慢默认访问。不要使用sync,它已经过时且有问题。请参阅codingexplorer.com/nsuserdefaults-a-swift-introduction中的“更新”部分。我还进行了许多关于此的测试,并在所有应用程序中删除了对sync的所有调用,即使在极端情况下也没有出现任何问题。但是,如果您喜欢无用的、可能会减慢应用程序的东西,请调用sync...
另外,您可以使用计算属性而不是成对的setter/getter方法,这样会更简洁。