数据持久性( Data Persistence ) 是将任何类型的数据存储到本地端的机制,在本地存储数据的能力,以便使用者下次打开应用程序时可以使用相同的数据而不会更改,接下来将介绍几种最常见的数据存储方式。参考文件
让我们从数据存储中最简单的 UserDefaults 开始, UserDefaults 用作键值存储, 有特定的方法来检索精确的数据类型(bool(forKey:)、int(forKey:)
等)和 object(forKey)
来检索 Any
UserDefaults 是一个 NSObject 子类,它为我们提供了同步读取和写入(在缓存级别)和异步持久化级别。
class UserRepository {
enum Key: String, CaseIterable {
case name, avatarData
func make(for userID: String) -> String {
return self.rawValue + "_" + userID
}
}
let userDefaults: UserDefaults
// MARK: - Lifecycle
init(userDefaults: UserDefaults = .standard) {
self.userDefaults = userDefaults
}
// MARK: - API
func storeInfo(forUserID userID: String, name: String, avatarData: Data) {
saveValue(forKey: .name, value: name, userID: userID)
saveValue(forKey: .avatarData, value: avatarData, userID: userID)
}
func getUserInfo(forUserID userID: String) -> (name: String?, avatarData: Data?) {
let name: String? = readValue(forKey: .name, userID: userID)
let avatarData: Data? = readValue(forKey: .avatarData, userID: userID)
return (name, avatarData)
}
func removeUserInfo(forUserID userID: String) {
Key
.allCases
.map { $0.make(for: userID) }
.forEach { key in
userDefaults.removeObject(forKey: key)
}
}
// MARK: - Private
private func saveValue(forKey key: Key, value: Any, userID: String) {
userDefaults.set(value, forKey: key.make(for: userID))
}
private func readValue<T>(forKey key: Key, userID: String) -> T? {
return userDefaults.value(forKey: key.make(for: userID)) as? T
}
}
建议使用 UserDefaults 来存储用户的偏好。 我们应该用它来存储较零碎的讯息(例如,用户是喜欢亮模式还是暗模式,他们想在什麽时间收到每日提醒,他们是否真的想收到通知等)
<<: Day25 Plugin 从零开始到上架 - Android instagram APIs
>>: Day-27 请问 git rebase 和 git merge 是什麽?差别又在哪里?
前言 今天接续昨天的,继续讲数学。 正文 abs() 取绝对值用的 abs(n); // n为任意数...
阿豪牛车庒冰糖猪脚 地点:台南市新营区公园路一段218号 时间:17:00~21:00 在南部有些店...
这一个章节节我们要来介绍复合查询,当单一的查询子句无法完成需求时,为了应付这种高级查询需求,所以就产...
当周进度 NET101 从拉面店的贩卖机理解什麽是 API 从传纸条轻松学习基本网路概念 Reque...