如何为快速Codable编写强大的模型并再次使用该模型。

在这篇文章中,我将不写什么是可编码协议以及如何使用它! 取而代之的是,我将在一个很短的故事中告诉您如何用快速的语言为其编写最佳模型。 所以走吧…

如果您对编码技术不熟悉,我强烈建议您对其进行详细了解,然后再回到这里阅读其余内容。

你们中的大多数人都可以使用可解码来反序列化JSON文件。 但是如果您想在项目中再次使用该模型作为列表或数组又如何呢? 或者只想从您的项目中的模型创建一个全局实例数组,并进行很多次映射。 不幸的是,许多初级开发人员将创建另一个模型结构并使用该模型结构。 但是它们可能会遇到可选选项或强制展开的问题。

假设此JSON文件为:

  { 
“ name”:“ John”,
“ lastName”:“ Doe”,
“年龄”:27
}

在此JSON文件中,我们有一个简单的用户数据。 所以我们从简单的模型结构开始:

  struct user_Model:Codable { 
让名字:字符串?
让lastName:String吗?
让年龄:int?
}

在此模型中,我们使用“ let” ,并且必须在每个参数的末尾添加可选的“?” ,以避免反序列化错误。 如果该参数在该JSON文件中不存在,它将返回“ nil”而不是该参数。 因此,我们应始终处理“无”。 another另一方面,您无法通过安全展开来制作该模型的另一个实例。 这将发生:

(testUser?.name)! 这太错了。

也许您说我们可以使用Class而不是struct,然后使用:

 必需的init(){ 

}

并在那里初始化每个参数。 像这样 :

  class user_Model:Codable { 
变量名称:字符串
var lastName:String
var age:Int

必需的init(){
self.name =“”
self.lastName =“”
self.age = 0
}
}

但是当我们要使用JSONDecoder()解码JSON文件时

 让解码器= JSONDecoder() 
让产品=尝试解码器。解码(user.self,来自:json)

它无法正确映射。 🙁!

因此,为可编码协议编写强大模型的最好方法是:

 在里面(){} 
init(来自解码器:解码器)引发{}

从解码器,我们应该使用container(keyedBy 🙂 那么我们可以安全地解码一个值(如果它存在于我们的JSON文件中),如果该参数不存在,它将分配我们定义的默认值。 🙂!

因此我们的完整模型将如下所示:

支持codable,您也可以在任何地方使用和创建实例。

现在是如此安全。 🙂

但是这种JSON文件呢:

如您所知,我们在这里需要另一个加入模型,那么我们该如何处理呢? 我们应该为此创建另一个模型并执行相同的操作。 然后在user_Model中,我们可以安全地引用联接模型以反序列化联接对象。

我不会再延长篇幅并将代码直接放在此处。 我知道你们所有人都很聪明,可以弄清楚。 🙂

因此,最后使用这种模型,我们可以在程序中再次创建该模型的实例,而不会出现任何问题。

感谢您的阅读。

这是我关于UserDefaults的其他帖子:

如何编写强大的UserDefaults类?

iOS,迅速| 访问用户默认对象| 轻松读取写入数据

medium.com