将字典保存到 UserDefaults

2023-11-25

我试图在 UserDefaults 中存储字典,并且在代码运行时总是导致应用程序崩溃。以下是执行时导致应用程序崩溃的示例代码。我尝试将其转换为 NSDictionary 或最初将其设为 NSDictionary - 得到了相同的结果。

class CourseVC: UIViewController {

let test = [1:"me"]

override func viewDidLoad() {
    super.viewDidLoad()

    defaults.set(test, forKey: "dict1")

    }

}

字典默认是Codable对象,您可以使用以下扩展将它们保存到UserDefaults

extension UserDefaults {
    func object<T: Codable>(_ type: T.Type, with key: String, usingDecoder decoder: JSONDecoder = JSONDecoder()) -> T? {
        guard let data = self.value(forKey: key) as? Data else { return nil }
        return try? decoder.decode(type.self, from: data)
    }

    func set<T: Codable>(object: T, forKey key: String, usingEncoder encoder: JSONEncoder = JSONEncoder()) {
        let data = try? encoder.encode(object)
        self.set(data, forKey: key)
    }
}

它们可以这样使用:

let test = [1:"me"]
UserDefaults.standard.set(object: test, forKey: "test")

let testFromDefaults = UserDefaults.standard.object([Int: String].self, with: "test")

此扩展和许多其他扩展是斯威特斯威夫特,您可能想将它用于您的下一个 iOS 项目:)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将字典保存到 UserDefaults 的相关文章

随机推荐

  • SymPy 中的表达式简化

    我想实现这种简化 e ac ad bc bd e a b c d SymPy 简化函数都不是这样工作的 SymPy 或 python 中的其他地方是否有其他方法可以实现这种简化 您可以使用collect expr e func factor
  • 在 setTimeout 中使用 JavaScript 闭包

    我使用 setTimeout 来模拟渲染 我得到这样的结构 var Renderer new Class Implements Events initialize this onRender onRender function some r
  • k近邻算法中k的值

    我有 7 个类需要分类 我有 10 个特征 在这种情况下 我需要使用 k 的最佳值吗 或者我是否必须针对 1 到 10 大约 10 之间的 k 值运行 KNN 并在算法本身的帮助下确定最佳值 此外文章我在评论里发帖有this one这也表明
  • 如何从控制台读取空格分隔的数字?

    我正在尝试执行一项简单的任务 将控制台中的空格分隔的数字读取到vector
  • WPF 组合框:文本框和下拉列表中的不同模板

    这是我的组合框
  • 类型错误:列表索引必须是整数或切片,而不是 str

    我有两个列表 我想将它们合并到一个数组中 最后将其放入 csv 文件中 我如何避免这个错误 def fill csv self array urls array dates csv file path result array array
  • MongoDB中的日期:将Date对象插入Mongo数据库时,日期变得比本身早1天

    我的日期字符串格式是这样的 2012 年 1 月 2 日在Instant parse 方法之后 instant实例的日期变成了2012年1月1日 提前了1天 为什么呢 如果原始日期字符串是 jan 1 2012 则即时日期将为 2011 年
  • Clojure中doseq和for的区别

    Clojure 中的 doseq 和 for 有什么区别 有哪些例子可以说明您何时会选择使用其中一种而不是另一种 不同之处在于for构建一个惰性序列并返回它doseq用于执行副作用并返回 nil user gt for x 1 2 3 x
  • 环境不一致,请仔细查看套餐方案

    我尝试从 anaconda 更新或安装新软件包 最近出现了此消息 The environment is inconsistent please check the package plan carefully The following p
  • 检查属性是否有属性

    给定类中具有属性的属性 确定它是否包含给定属性的最快方法是什么 例如 IsNotNullable IsPK IsIdentity SequenceNameAttribute Id public Int32 Id get return Id
  • 我想我可以通过 Javascript 检测浏览器本身内部的 Tor 浏览器吗?

    如果浏览器是 Tor 浏览器 我想禁用我正在构建的网络应用程序的某些功能 我可以在浏览器本身 客户端 而不是服务器端 内部查明浏览器是否是 Tor 浏览器 我更喜欢一个不发出任何 HTTP 请求来将浏览器的 IP 与 Tor 出口节点进行匹
  • 使用 javascript 和 PhoneGap 的 HTML5 移动应用本地化

    我正在创建一个在所有 3 个移动平台 Android iOS 和 Windows Mobile 8 上运行的 HTML5 移动应用程序 我正在使用 javascript 进行本地化 https github com eligrey l10n
  • 如何在 Swift 中显示来自另一个类的警报?

    我有一个主课 AddFriendsController 运行以下代码行 ErrorReporting showMessage Error msg Could not add student to storage 然后我有这个ErrorRep
  • 从 python 中的列表中获取唯一值[重复]

    这个问题在这里已经有答案了 我想从以下列表中获取唯一值 nowplaying PBS PBS nowplaying job debate thenandnow 我需要的输出是 nowplaying PBS job debate thenan
  • 在python中通过调制解调器发送wav声音

    我正在尝试用 python 和 linux 制作一个自动应答和呼叫机 但到目前为止我只能拨打一个号码 当谈到发送声音或录制声音时 我没有成功 过去一周我一直在努力解决这个问题 到目前为止还找不到解决的方法 我使用的调制解调器是 Conexa
  • 可以嵌套
    吗?

    在 asp net 网页的内容页中 我想包含 paypal 按钮 立即付款 所以 我有一个母版页和一个内容页 在我的内容页面中 我复制粘贴贝宝代码 特别是 我使用 modalpopupextender 来允许我的用户购买该对象 问题是 它不
  • 了解 JAX-WS 中的 @Oneway 注释

    根据 javadoc 指示给定的 WebMethod 只有输入消息而没有输出 通常 单向方法在执行实际业务方法之前将控制线程返回给调用应用程序 如果标记为 Oneway 的操作具有返回值或 Holder 参数 或者声明任何已检查异常 181
  • UPDATE SET 中的子查询 (sql server 2005)

    我有一个关于在 Update 语句中使用子查询的问题 我的例子 UPDATE TRIPS SET locations city FROM select Distinct city from poi where poi trip guid t
  • Qt中如何从主窗口打开一个新窗口?

    我是 qt 编程新手 想知道如何在主窗口消失的情况下从主窗口打开一个新窗口 有没有源代码我可以看一下 从主窗口中的插槽调用以下代码 QWidget wdg new QWidget wdg gt show hide this will dis
  • 将字典保存到 UserDefaults

    我试图在 UserDefaults 中存储字典 并且在代码运行时总是导致应用程序崩溃 以下是执行时导致应用程序崩溃的示例代码 我尝试将其转换为 NSDictionary 或最初将其设为 NSDictionary 得到了相同的结果 class