我使用 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/