首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Swift:如何检查UserDefaults是否存在,如果不存在,则保存选定的标准值?

在Swift中,我们可以使用UserDefaults来保存用户的偏好设置和应用程序的配置信息。要检查UserDefaults中是否存在某个键的值,可以使用object(forKey:)方法。如果返回的值为nil,则表示该键不存在。

下面是一个示例代码,演示了如何检查UserDefaults是否存在某个键的值,如果不存在,则保存选定的标准值:

代码语言:swift
复制
// 检查UserDefaults中是否存在某个键的值
if UserDefaults.standard.object(forKey: "key") == nil {
    // 不存在,则保存选定的标准值
    UserDefaults.standard.set("standard value", forKey: "key")
}

在上面的代码中,我们使用UserDefaults的standard实例来访问UserDefaults。standard实例是UserDefaults的一个单例,可以直接使用。

如果UserDefaults中不存在键为"key"的值,我们使用set(_:forKey:)方法将"standard value"保存到UserDefaults中。

需要注意的是,UserDefaults中保存的值的类型必须是符合Property List的数据类型,如String、Int、Bool、Data等。

关于UserDefaults的更多信息,你可以参考腾讯云的文档:UserDefaults

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

UserDefaults 浅析及其使用管理

UserDefaults 里面最好使用object(forKey:),这是标准用法。 UserDefaults 底层也是使用 plist 文件,那它和普通 plist 文件读取有什么区别呢?...{ get } /// 获取Data,默认为空 var dataValue: Data { get } // MARK: - 不存在nil /// 获取Bool...Data() } // MARK: - 不存在nil /// 获取Bool public var bool: Bool { return UserDefaults.standard.bool...在取值方法上借鉴了SwiftyJSON思想,为每种基本结构提供可选及非可选两种方式,在使用时可根据自己使用场景灵活使用。 我们如何进行使用呢?见下方代码示例,相关说明见注释。...当存储不存在时返回默认 public init(_ key: String, defaultValue: T, userDefaults: UserDefaults = UserDefaults.standard

1K10

开关组件对比

JPush_APPKey @"JPush_APPKey_DEBUG" #else #define JPush_APPKey @"JPush_APPKey_Release" #endif 同样,也会有本地根据某个来判断是否显示过什么东西逻辑...大部分情况下开发时候,是用UserDefaults存储一个bool,用于判断。...}) // 使用时 // 获取存储,用于判断 对比 而在09|开关组件:如何使用功能开关,支持产品快速迭代中,作者把开关组件分为了三类:编译时开关、本地开关和远程开关 编译时开关:让编译器通过检查编译条件来启动后者关闭一些功能...通过Swift protocol定义了ToggleType和TogglesDataStoreType两个协议,并定义两个方法,判断开关是否打开、以及更新开关状态 // TogglesDataStoreType.swift...update方法内容如果需要缓存添加存储逻辑,如果不需要,则无需实现。

94811
  • iOS14开发-数据存储

    所有的非代码文件都要保存在此,例如图像,图标,声音,plist,文本文件等。 沙盒机制保证了 App 安全性,因为只能访问自己沙盒文件下文件。...domainMask:搜索主目录位置。userDomainMask 表示搜索范围限制于当前应用沙盒目录(参考定义注释)。 expandTilde:是否获取完整路径。...,所以模拟器运行同一个 App 时所得到沙盒路径是不一样,但上架 App 在真机上运行不存在这种情况。...return currentVersion > localVersion } } 默认 如果需要在使用时设置 UserDefaults 默认,可以使用register方法。...(defaults: [ Keys.name.rawValue: "UserA", Keys.isRem.rawValue: false ]) 注意:在设置默认如果修改了其中属性

    1K20

    应用程序内购买教程:入门

    它接收一个SKProduct对象数组并将它们传递给先前保存完成处理程序。处理程序使用新数据重新加载表。如果出现问题,request(_:didFailWithError:)调用。...检查Apple Developer System状态。或者,尝试此链接。如果它没有响应状态iTunes沙箱可能已关闭。...} else { print("Not purchased: \(productIdentifier)") } } super.init() } 对于每个产品标识符,检查是否存储该...如果交易已完成或已恢复,则会将其添加到购买集并将标识符保存在其中UserDefaults。它还会在该事务中发布通知,以便应用程序中任何感兴趣对象都可以监听它以执行更新用户界面等操作。...Swift Shopping RazeFace 恢复购买 如果用户删除并重新安装应用程序或将其安装在其他设备上,他们需要能够访问以前购买项目。

    5.4K20

    iOS安全基础之钥匙串与哈希

    打开AuthController.swift,这是一个静态类,它将保存与此应用程序身份验证相关逻辑。...在AuthController.swift顶部,由Foundation导入以下添加内容: import CryptoSwift CryptoSwift是用Swift编写许多标准加密算法中最受欢迎集合之一...如果你没有进行盐化处理,那么输入哈希密码照样会被攻击。盐化会增加攻击复杂性,此外,你可以将用户电子邮件和密码与盐化结合在一起以创建一个不易被破解哈希。...UserDefaults中的当前用户,如果没有存储用户,就不会有一个标识符来查找来自钥匙串中密码哈希,这就代表用户没有登录。...2.你可以从钥匙串中读取密码哈希,如果密码存在且不为空,就表示该用户已登录。

    2.8K20

    Swift 单元测试入门

    let cache = SearchQueryCache(userDefaults: userDefaults) /// ... write the test } } 这样做可以确保您不会操纵在模拟器上测试期间使用标准用户默认...nil,如果断言成功返回它。...它会阻止您编写 XCTAssertNotNil 并结合解包或处理其余测试代码条件链接。我鼓励您阅读我文章 《如何使用 XCTest 在 Swift 中测试可选》以了解更多详细信息。...如果您有多个测试方案,这将很有用。 只显示失败测试。这将帮助您快速找到失败测试。 在侧边栏中启用覆盖 在编辑器中启用代码覆盖 测试迭代计数向您显示在上次运行测试期间是否命中了特定代码段。...其次,您可以开始编写修复程序并运行新单元测试来验证修复程序是否有效。此技术比运行模拟器来验证您修复是否有效要快。 结论 编写定性单元测试是开发人员基本技能。

    2.7K40

    使用Swift模拟用户登录当网获取数据并保存到MySQL中

    4与MySQL数据库无缝集成:Swift提供了多个MySQL客户端库,如MySQL Connector,使得与MySQL数据库交互变得简单而便捷。如何进行模拟登录模拟登录用户当网获取数据第一步。...2发送登录请求:使用URLSessiondataTask方法发送登录请求,并处理登录响应。3处理登录响应:检查登录响应状态码和内容,判断登录是否成功。...如果登录成功,获取并保存登录后会话信息,以便后续数据获取。...MySQL中获取数据后,我们可以使用SwiftMySQL客户端将数据保存到MySQL数据库中。...2构建插入语句:使用SwiftMySQL客户端库,构建插入语句,将获取数据参数作为提交给插入语句。3执行插入操作:使用SwiftMySQL客户端库,执行插入操作,将数据保存到MySQL数据库中。

    20630

    Ask Apple 2022 中与 Core Data 有关问答 (下)

    A:启动时检测 UserDefaults 是否为空,如果不是,导入 Core Data,然后删除本地 UserDefaults。...当生成文件后,需要将 Entity 切换成 Manual /None 模式,否则 Xcode 会出现类型重复声明错误( Xcode 中还会有另一份 Entity 定义保存在项目内部 ),如果仍无法编译...实体属性可选性Q:Core Data 中实体属性可选性表现与预期不一致。如果我将某个属性标记为可选,该属性不应具有默认,并且托管属性应始终为可选属性。...如果我将其标记为非可选,它应该需要默认,并且托管属性应始终是非可选。我们是否可以期待将来( 至少在新项目中 )做出这样修正?...A:Core Data 可选性理念早于 Swift 存在,允许属性暂时无效。

    3.2K20

    Swift属性包装器

    让我们看一下属性包装器是如何工作,并探讨一些可以在实践中使用它们情况示例。...除此之外,唯一真正要求是每个属性包装类型应该包含一个名为wrappedValue存储属性,该属性告诉 Swift 要包装是哪个底层。...然而,我们一些UserDefaults实际上可能是可选如果我们必须不断地指定nil作为这些属性默认,那将是不幸——因为这不是我们在不使用属性包装器时必须做事情。...为了避免在这种情况下发生崩溃,我们必须更新属性包装,首先检查是否有任何赋值为nil,然后再继续将其存储在当前UserDefaults实例中,如下所示: // 因为我们属性包装器类型不是可选,但是...投影 正如我们在本文中所探讨,属性包装器一个主要好处是,它们使我们能够以一种完全不影响我们调用站点方式向属性添加逻辑和行为——因为无论属性是否包装,都是以完全相同方式读写

    2.6K30

    译文: iOS Unit Testing and UI Testing Tutorial

    用户选择游戏模式,app也会保存作为默认(重启app,默认游戏模式是使用者上次选择模式——译者) HalfTunes是NSURLsession Tutorial中一个app,更新到Swift 3...你可能还需要测试当接收到URLSession输入时,你代码是否可以正确工作,又或者当UserDefaults、CloudKit更新时,是否还能正常工作。...image 来自Stub假数据 接下来测试,会检查updateSearchResults(_:)方法是否正确地解析了下载到数据,检查searchResults.count是否正确。...右下角segmented control用于切换游戏模式,并且更新gameStyle这个使用者默认选项。 下一个测试就是检查app是否正确更新了gameStyle这个默认。...、选择了不同按钮之后,label是否正确存在(显示)。

    1.4K30

    Mac OSX 开发入门基础系列之NSTask

    NSTask 在Swift 中与Objective-C中不同 Objective-C中, 是NSTask类 Swift 中, 是Process类 3....NSTask 使用 我们通过创建一个简单克隆Git仓库工程来熟悉NSTask使用 如果你比较捉急,可以提前从这里下载NSTaskDemo 3.1 创建工程(本示例使用Swift,并默认你已经熟悉基本...保存用户选择路径(为了获取访问权限) UserDefaults.standard.setValue(openPanel.url?....= "" else {return} if isLoadingRepo {return} // 如果正在执行,返回 isLoadingRepo = true /...系统中 ,沙盒有个规则:在App运行期间通过NSOpenPanel用户手动打开任意位置文件,把这个这个路径保存下来,后面都是可以直接用这个路径继续访问文件,但当App退出后再次运行,这个路径默认是不可以访问

    2.2K40

    Swift 中 User Defaults 读取和写入

    前言 User Defaults 是 Swift 应用程序存储在应用启动之间保持首选项首选解决方案。它是由属性列表(plist)文件支持键-存储。...介绍 User Defaults 应用程序通常使用 User Defaults 来存储用户首选项。你可以存储首选项,例如用户最喜欢股票或保存特定用户状态,例如“用户已看到引导”。...User Defaults 支持以下类型: 数据 字符串 数字(NSNumber) 日期 数组 字典 布尔 如果类型不在此列表中,你需要找到一种将其转换为任何受支持类型方法。...与此同时,我可以使用开关重置该,并使用 RocketSim 重新启动应用程序,以查看工具提示是否再次显示。 你可以想象这大大加快了测试依赖于 User Defaults 实施工作流程。...最好是你可以免费开始并使用标准套件测试编辑器,只需从 Mac App Store 安装 RocketSim 即可。

    27820

    编码篇-持久化NSUserDefaults

    前言 NSUserDefaults类,以字典形式保存数据,IOS会自动把字典中键值对转换成对应XML文件(也就是plist文件),这个文件会被保存到APP沙盒目录中(路径为Library/Preferences...保存数据。...Attempt to insert non-property list object 报错原因, 从NSUserDefaults返回是不可改变,即便是你在存储时候使用是可变。...例如你使用mutable string做为“MyStringDefault”,当你做使用stringForKey:方法获取,这个仍然是不可变。...- (void)registerDefaults:方法来初始化,这个方法会检查 NSUserDefaults是否已经存在了相同key,如果存在就不会将其覆盖(相当于什么也没做),如果不存在就做保存操作

    1.2K10

    IOS开发之记录用户登陆状态

    今天要说如何记录我们用户登陆状态。例如微信,QQ等,在用户登陆后,关闭应用在打开就直接登陆了。那么我们在App开发中如何记录用户登陆状态呢?...之前在用PHP或者Java写B/S结构东西时候,我们用Session来存储用户登陆信息,Session是存在服务器上仅在一次回话中有效,如果要记录用户登陆状态,那么会用到一个叫Cookie东西...1.首先我们得有一个登陆页面对应类为ViewController.h, 在登陆页面有两个TextField和一个Button用来接受用户输入,在点击Button中回调方法中,如果用户登陆成功,把用户信息存入...属性是否来选择加载哪个页面。...UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]];   //如果用户未登陆把根视图控制器改变成登陆视图控制器

    1.5K90

    @State 研究

    类型及作用域图片来自于SwiftUI for Absoloute Beginners 其中@State只能用于当前视图,并且其对应数据类型为类型(如果非要对应引用类型的话必须在每次赋值时重新创建新实例才可以...@State如何工作 在分析@State如何工作之前,我们需要先了解几个知识点 属性包装器 作为swift 5.1新增功能之一,属性包装器在管理属性如何存储和定义属性代码之间添加了一个分割层。...呈现值(投射)返回当前包装是否为偶数 @propertyWrapperstruct TwelveOrLess { private var number: Int init() { self.number...•public var wrappedValue: Value { get nonmutating set } 意味着他包装并没有保存在本地。•它呈现值(投射)为Binding类型。...我推测@State同视图依赖是在ViewBuilder解析时进行。编译器在解析我们body时,会判断date数据变化是否会对当前视图造成改变。如果没有则不建立依赖关联。

    2.9K20

    iOS_SwiftUI_iOS14_Widget

    ,即长按出现菜单是否有编辑选项(如股票widget,用户可以选择显示哪只股票) Embed in Application:(表示该widget是哪个target附属品,如果workspace里有个...target就要注意别选错了) -> Finish 如图: 2、Base Code 自动生成文件 + 代码: MOWidget.swift文件:主要东西都在这里面 MOWidget.intentdefinition...(ofKind: "MOWidget") // 刷新指定widget 、OC文件里刷新 会比较麻烦:还是需要利用swift文件,加上一堆判断后调用刷新方法。...通过AppGroupID获取UserDefaults进行数据读写就可以共享了。...data: data) ... } 8.4、light、dark模式适配 新建Color:Assets.xcassets -> + -> Color set -> 可以分别设置light和dark模式下

    2.3K20

    【Linux】MGR部署脚本

    =$(mysql -uroot -p000000 -e "show databases;" | grep -w $a) #如果不存在该数据库,提醒用户该数据库不存在,请重新输入,并退出该脚本 if [...exit 1 fi #创建备份目录 bk=/opt/mysql/ #检查是否存在该目录,不存在创建,存在设置不可任意改变该目录 if [ !...,不存在创建,存在设置不可任意改变该目录 if [ !...exit 1 fi #上传文件到创建好容器上,如果要上传一个目录,可直接输入目录名,也可将目录路径给某一个,利用此来传递(a=/root/keystone $a来代替) swift -A http...exit 1 fi #判断用户是否存在 u=`openstack user list | grep -w -o $name` #如果用户存在提示用户该用户存在,正在执行删除命令,不存在提示用户该用户不存在

    6410
    领券