我想每一个 iOSer 对UserDefaults都有所了解,但大家真的完全了解它吗?下面,我谈谈我对UserDefaults的看法。 同时,这也应该是 iOS 持久化方式系列的开篇文章了。...相关问题 UserDefaults的存储范围 因为UserDefaults底层使用的plist文件,所以plist文件支持的数据类型就是UserDefaults的存储范围,其中包括Array、Data...因为UserDefaults存储的数据都是明文,没有经过加密,所以尽量不要使用UserDefaults存储敏感数据,即使使用,也要使用加密算法对其进行加密后再存储进去。...示例,协议默认实现为 UserDefaults.standard /// 如果想存储在另外的plist文件中,便可以单独实现 var userDefaults: UserDefaults...当存储值不存在时返回的默认值 public init(_ key: String, defaultValue: T, userDefaults: UserDefaults = UserDefaults.standard
// UserDefaults let userDefaults = UserDefaults.standard override func viewDidLoad() {...userDefaults.set(swit.isOn, forKey: "isOn") // 最后进行同步 userDefaults.synchronize...// UserDefaults let userDefaults = UserDefaults.standard func scene(_ scene: UIScene, willConnectTo...因此还有另外一种获取 UserDefaults 对象的方法:UserDefaults(suiteName: String?)...let userDefaults = UserDefaults(suiteName: "abc") userDefaults?.
userDefaults objectForKey:@"theDays"] intValue]; //userDefaults里的版本号 float udAppVersion = [[userDefaults...objectForKey:@"appVersion"] intValue]; //userDefaults里用户上次的选项 int udUserChoose = [[userDefaults...里版本号 float udAppVersion = [[userDefaults objectForKey:@"appVersion"] intValue]; //userDefaults...里用户天数 int udtheDays = [[userDefaults objectForKey:@"theDays"] intValue]; //当前版本比userDefaults...里用户天数 int udtheDays = [[userDefaults objectForKey:@"theDays"] intValue]; //当前版本比userDefaults
大部分情况下开发的时候,是用UserDefaults存储一个bool值,用于判断。...比如: // 存储 UserDefaults.standard.setValue(value, forKey: keyStr) UserDefaults.standard.synchronize()...// 判断 if let value = UserDefaults.standard.value(forKey: keyStr) as?...: UserDefaults private init(userDefaults: UserDefaults) { self.userDefaults = userDefaults...// 可以注意userDefaults.register方法的使用,赋默认值 self.userDefaults.register(defaults: [
@AppStorage研究 前言 在苹果生态的应用中,开发者或多或少都会使用到UserDefaults。我个人习惯将可被用户自定义的配置信息(精度、单位、色彩等)保存在UserDefaults中。...默认情况下使用的是UserDefaults.standard,也可以指定其他的UserDefaults。...public extension UserDefaults { static let shared = UserDefaults(suiteName: "group.com.fatbobman.examples...} @AppStorage("userName",store:UserDefaults.shared) var name = "fat" 对UserDefaults操作将直接影响对应的@AppStorage...UserDefaults是一种高效且轻量的持久化方案,它有以下不足: 数据不安全 它的数据相对容易提取,所以不要保存和隐私有关的重要数据 持久化时机不确定 为了效率的考量,UserDefaults中的数据在发生变化时并不会立即持久化
= UserDefaults.standard userDefaults.set(list, forKey: SLaunchNameKey) userDefaults.synchronize...{ let userDefaults = UserDefaults.standard return userDefaults.object(forKey: SLaunchNameKey)...[String] else { return false } UserDefaults.standard.set(list, forKey: "dragListImage...") UserDefaults.standard.synchronize() return true } class func readDragImageList() -> [String...{ return UserDefaults.standard.object(forKey: "dragListImage") as? [String] }
UserDefaults非常适合存储简单的设置,例如整数和布尔值,但是当涉及复杂数据时——例如自定义Swift类型——我们需要做更多的工作。...我们将在未来的项目中更多地研究Codable,但是目前我们的需求很简单:我们想要归档一个自定义类型,以便可以将其放入UserDefaults中,然后在从UserDefaults中返回时将其取消存档。...在这种情况下,我们实际上并不在乎使用哪种数据,因为它们只会存储在UserDefaults中。 要将用户数据转换为JSON数据,我们需要在JSONEncoder上调用encode()方法。...encoder.encode(self.user) { UserDefaults.standard.set(data, forKey: "UserData") } } 该数据常量是一种新的数据类型...不过,在这里,我们只关心它是可以直接写入UserDefaults中的数据类型之一。
什么是 NSUbiquitousKeyValueStore NSUbiquitousKeyValueStore 可以理解为 UserDefaults 的网络同步版本。...NSUbiquitousKeyValueStore 在大多数场合下表现的同 UserDefaults 十分类似: •都是基于键值存储•只能使用字符串作为键•可以使用任意属性列表对象(Property list...同 UserDefaults 之间的不同 •NSUbiquitousKeyValueStore 不提供注册默认值的方法使用 UserDefaults 时,开发者可以使用 register(defaults...在多数情况下,我们可以将@AppStorage 看作是 UserDefaults 的 SwiftUI 包装,但在个别情况下,@AppStorage 并不完全与 UserDefaults 的行为保持一致(...Zephyr 在处理 UserDefaults 同 NSUbiquitousKeyValueStore 之间的联动方面做的很不错,但由于@AppStorage 的独特性(并非真正意义上的 UserDefaults
= [NSUserDefaults standardUserDefaults]; //登陆成功后把用户名和密码存储到UserDefault [userDefaults...setObject:username forKey:@"name"]; [userDefaults setObject:password forKey:@"password"]; ...单例 NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; //移除UserDefaults...中存储的用户信息 [userDefaults removeObjectForKey:@"name"]; [userDefaults removeObjectForKey:@"password..."]; [userDefaults synchronize]; //获取storyboard UIStoryboard *storyboard = [UIStoryboard
数据传递在主App里写入数据到UserDefaults中,在widget中读取数据/// 在主App中写入数据到UserDefaults中 NSString *suiteName =...[NSString stringWithFormat:@"group.%@", [[NSBundle mainBundle] bundleIdentifier]];NSUserDefaults *userDefaults...= [[NSUserDefaults alloc] initWithSuiteName:suiteName];[userDefaults setObject:data forKey:dataKey];...[userDefaults synchronize];/// 通知Widget刷新数据@available(iOS 14, *)@objc func receiveNotice(_ notification...stringByReplacingOccurrencesOfString:@".anchorrec" withString:@""]];self.defaultPacketData = [self.userDefaults
// MARK: - Store enum StoreType { case userDefaults case plist } func setContentToDevice (content...() defaults.setObject(content, forKey: key) print("Set - UserDefaults") }else if...if type == .userDefaults { let defaults = NSUserDefaults.standardUserDefaults() let content...= defaults.objectForKey(key) returnObject = content print("Get - UserDefaults")...下面给出使用这个函数的范例:(其中 Hero 是我自定义的类) let arr = [1,2,3,4,5] setContentToDevice(arr, key: "testArr", type: .userDefaults
存储这些首选项的代码可以如下所示: UserDefaults.standard.set(true, forKey: "has-seen-onboarding") UserDefaults.standard.set...(["AAPL", "TSLA"], forKey: "favorite-stocks") print(UserDefaults.standard.bool(forKey: "has-seen-onboarding...")) // 打印:true print(UserDefaults.standard.array(forKey: "favorite-stocks")) // 打印:["AAPL", "TSLA"]...配置后,你可以使用组标识符创建新实例: extension UserDefaults { static let group = UserDefaults(suiteName: "group.your.identifier...uncaught exception ‘NSInvalidArgumentException’, reason: ‘Attempt to insert non-property list object UserDefaults.Stock
- 1 { let userDefaults = UserDefaults(suiteName: "group....- 1 { let userDefaults = UserDefaults(suiteName: "group....- 1 { let userDefaults = UserDefaults(suiteName: "group....- 1 { let userDefaults = UserDefaults(suiteName: "group....- 1 { let userDefaults = UserDefaults(suiteName: "group.
例如,假设我们正在开发一个消息应用程序,它使用 Foundation 的 UserDefaults API在磁盘上存储各种用户设置和其他轻量级数据。...这样做通常需要编写某种形式的映射代码,以便将每个值与其底层的UserDefaults存储进行同步——通常需要为我们要存储的每个数据段进行复制。...然而,通过在通用属性包装器中实现这种逻辑,我们可以使其易于重用——因为这样做可以让我们简单地将包装器附加到任何希望由UserDefaults支持的属性。...{ static var shared: UserDefaults { let combined = UserDefaults.standard combined.addSuite...我们所要做的就是将defaultValue属性添加到包装器中,然后在底层UserDefaults存储不包含属性键的值时使用它。
NSString *nowday = [formatter stringFromDate:[NSDate date]]; NSString *saveDay = [UserDefaults...并且把isHadShowUpdate 设置成yes [self canChooseUpdate]; [UserDefaults...setObject:@"1" forKey:@"isHadShowUpdate"]; [UserDefaults setObject:nowday forKey:@"versionUpdateKey...IsHadShowUpdate isEqualToString:@"0"]){ // [self canChooseUpdate]; // [UserDefaults...setObject:@"1" forKey:@"isHadShowUpdate"]; // [UserDefaults setObject:nowday forKey
有时候我们需要清空所有使用 NSUserDefaults 的记录,但是我们常用的都是removeObject,即移除特定的值: UserDefaults.standard.removeObject(forKey...其实苹果是有提供清空所有记录的方法的,即removePersistantDomainForName: if let bundleID = Bundle.main.bundleIdentifier { UserDefaults.standard.removePersistentDomain
实现 配置完成以后,可以通过UserDefaults或FileManager来实现 App 与 Widget 的数据共享,这里以UserDefaults为例,因为 SwiftUI 提供了@AppStorage...App // 包含App Groups的UserDefaults @AppStorage("contact", store: UserDefaults(suiteName: "group.cn.abc.yf.SwiftUI-Widget...")) // 然后在后面保存数据 Widget @AppStorage("contact", store: UserDefaults(suiteName: "group.cn.abc.yf.SwiftUI-Widget
一个可以生成用户默认实例以用于单元测试的示例: struct SearchQueryCache { var userDefaults: UserDefaults = .standard...: UserDefaults!...= UserDefaults(suiteName: userDefaultsSuiteName) } override func tearDownWithError() throws...{ try super.tearDownWithError() userDefaults.removeSuite(named: userDefaultsSuiteName...let cache = SearchQueryCache(userDefaults: userDefaults) /// ... write the test } } 这样做可以确保您不会操纵在模拟器上测试期间使用的标准用户默认值
本地存储可以使用 UserDefaults,响应式数据流使用 ObservableObject。...swift 1class Store { 2 private(set) static var userDefaults = UserDefaults() 3 4 public static...PropertyListEncoder().encode(like.codable) { 9 userDefaults.set(data, forKey: storeKey) 10...因为 likes 不是普通的 Array,所以不能直接使用 Userdefaults.set() 的方法写入,否则会 runtime crash。...swift 1init() { 2 if let data = Store.userDefaults.data(forKey: Store.storeKey) { 3
领取专属 10元无门槛券
手把手带您无忧上云