swift - 将字典变成自定义类型

标签 swift dictionary deserialization

我使用 Mirror 将所有自定义类转换为字典,以便使用类似 plist 的结构保存它们。使用 Mirrors,我只需按名称存储每个值,因此具有变量“title”的类将变成一个具有键“title”及其在字典中的值的字典。

问题是,如何扭转这种情况?我在每个字典中存储“类型”信息,所以我知道字典应该变成哪种类型,但我不知道如何进行转换。我曾经在 Objective-C 中使用 setValue: forKey:,但当我转向 Swift 时,我有很多结构不再适用。

我能想到的唯一解决方案是让所有自定义类型都符合描述 init(dictionary: [String: Any]) 函数的协议(protocol),然后手动将字典转换为类型那里。然后,在我的通用转换器函数中,我获取类型并通过 switch 语句简单地调用正确类型的 init 。不过,手动编写似乎非常愚蠢

title = dictionary["title"]

对于我在整个应用程序中拥有的数千个属性。有没有更简单的方法?

最佳答案

我认为您提出的选项是一个不错的选择。我建议使用可选的 init,例如 init?(dictionary: [String: Any]),如果您打算这样做,那么您可以确保某些键值对可用,并且如果您的最终对象不完整,则返回 nil。

但是,听起来您绝对可以从 Mantle 这样的东西中受益。或ObjectMapper ,两者都可以很好地处理序列化。

关于swift - 将字典变成自定义类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44886520/

相关文章:

swift - 从 UITabBar 中删除灰色渐变

java - 使用带 GUI 的 map

java - 实现 readObject 和 writeObject 方法以覆盖 java 中的默认序列化时允许异常吗?

python - 如何用数字关键字字典替换纯数字列? [Python]

c# - 无法反序列化惰性对象

java - Spark 使用不可变类和 java (+ lombok) 时出现反序列化错误

ios - SceneKit 围绕另一个节点 move 相机

swift - 在 swift 4 中将 UnitVolume.metricCups 转换为分数

java - Swift 和可见性声明

javascript - 使用 map 函数时减少 javascript 代码