如何解决从共享 Userdefaults 获取值时崩溃
我使用共享的 Userdefaults 将值从父 iOS 应用程序获取到 iOS14 Widget 扩展中。 似乎一切正常,我从未见过崩溃,不确定小部件是否会崩溃,但是,崩溃分析说:
Swift 运行时失败:在展开光学值时意外发现 nil。
该行是我从共享的 Userdefault 中获取我的值的地方,因此以下代码的最后一行:
struct QuitSmokingWidgetEntryView : View {
var entry: Provider.Entry
let myString:String = UserDefaults(suiteName: "group.com.xxx.xxx.widgetsharing")?.value(forKey: "myKey") as! String
正如我所说,一切似乎都没有崩溃,但我做错了什么,Xcode 崩溃分析告诉我该行发生了许多崩溃?如何解决?
感谢您的帮助!
解决方法
当使用 !
强制解包时,如果值为 nil(或者如果转换失败则使用 as!
),您总是会面临崩溃的风险。
在这种情况下,您可以这样做:
let myString:String = UserDefaults(suiteName: "group.com.xxx.xxx.widgetsharing")?.string(forKey: "myKey") ?? "Default value"
使用 string(forKey:)
可避免强制转换为 String
,然后使用 nil 合并 ??
可让您在 UserDefaults
中找不到任何值时提供默认值。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。