【发布时间】:2019-08-15 15:18:19
【问题描述】:
我正处于开发an open-source utility for storing state in the Bundle UserDefaults的初期阶段。
将非Codable 数据类型添加到[String: Any] 的Dictionary 时遇到问题。
我需要能够在尝试提交之前检查数据,因为UserDefaults.set(_:) 方法不会抛出任何错误。它只是崩溃。
所以我想确保我提交的Dictionary 是犹太洁食。
我不能只检查它是否是Codable,因为它有时会说它不是,而结构实际上是好的。 (是Dictionary<String, Any>,我可以在里面塞各种东西)。
我需要验证 Dictionary 是否可以生成 plist。如果这是 ObjC,我可能会使用 NSPropertyListSerialization 方法之一来测试 Dictionary,但似乎这组方法不适用于 Swift。
根据the UserDefaults docs,有一组特定的类型和类是“plist-studly”。
我认为测试列表中的每种类型是不可接受的。我需要看看我是否能找到一种不会在 Apple 第一次更新操作系统时搞砸的测试方法。
有没有什么好方法可以测试Dictionary<String, Any> 看它是否会让UserDefaults.set(_:) 呕吐?
【问题讨论】:
-
[String: Any]从不符合Codable因为Any不符合所以你不需要测试任何东西。也许您应该将数据存储在结构或类中而不是字典中 -
问题是它不需要是可编码的。 [String: Any] 可以很容易地成为一个 NSDictionary,这很好。我使用这种通用类型是有原因的。我正在制作一个相当通用的基类,它允许子类在值 Dictionary 中存储他们想要的任何内容。
-
所以我想做的就是在字典发送之前检查它,这样我就可以在不导致程序崩溃的情况下找到并报告问题。
-
我可以让它崩溃,因为这不太可能是运行时问题,但我能为我的工具用户提供的帮助越多越好。
-
“如果这是 ObjC,我可能会使用 NSPropertyListSerialization 方法之一来测试 Dictionary,但看起来这组方法对 Swift 不可用。”你能进一步解释一下吗?在 我 看来,这些方法不可用。
标签: ios swift macos plist userdefaults