使用SwiftyJSONModel在Swift中输入安全的JSON

原始发布在这里:

https://gist.github.com/alickbass/b0683c175d6078d2a3bdb4ca005f56da

到处都是JSON

现在,每个应用都非常依赖通过互联网传输数据。 无需解释😉。 而且,当然,最受欢迎的格式是JSON。 在SwiftObjective-C我们需要先解析JSON,然后将其映射到本机对象,然后再使用它。

让我们更具体地考虑以下示例:

  • 删除样板代码 。 因此,现在编译器知道我们使用了什么枚举,因此现在无需直接执行PropertyKey.hobbies.rawValue就可以使用: .hobbies就是这样。
  • 密钥现在是类型安全的 。 这意味着我们不再可以将随机原始字符串用作JSON键。 我们仅限于我们的PropertyKey enum并且当我们尝试使用无效键时,编译器将给我们编译时错误。

看起来不错! 这仅仅是开始!

推断返回类型

除了类型安全键之外,我们不再需要编写stringValueintValue。框架知道在执行操作时应返回哪些类型

 让firstName:字符串 

您已经指定firstNameString

所以现在代替

  firstName = json [PropertyKey.firstName.rawValue] .stringValue 

无需指定stringValue现在您可以编写以下代码

  firstName =试试object.value(for:.firstName) 

这消除了我们使用Apple的方法进行转换时以及单独使用SwiftyJSON时获得的许多烦人的样板。 但这还不是全部。

现在,对于数组,我们不需要显式映射并转换为特定类型

所以代替

 爱好= json [PropertyKey.height.rawValue] .arrayValue.map({$ 0.stringValue}) 

现在我们要做的是

 爱好=尝试object.value(for:.hobbies) 

它的作用与常规String相同。 编译器已经知道您期望使用Strings Array ,因此您无需自己再次执行此操作。

详细错误

考虑以下JSON

在这里,键lastName值无效,因为我们希望它是String ,但是我们收到了Bool 。 以前,我们的开发人员无法了解JSON到底出了什么问题,因此我们不得不进行大量调试才能了解导致问题的原因。

但是, 现在 SwiftyJSONModel 告诉use哪个属性完全无效

如您所见,我们现在可以立即了解JSON中哪些属性无效,并且我们可以与后端开发人员进行对话或分别调整模型。

轻松访问嵌套的JSON

考虑以下JSON:

因此,我们这里有一个嵌套的JSON ,深度为2级。 但是,我们不想为每个嵌套对象创建单独的模型,而只想映射到以下模型:

我们的微框架可以很容易地做到这一点:

在这里,我们可以通过对象的完整键路径访问对象:

  .country,.continent,.name 

如果发生错误,我们将收到以下信息:

 [country][continent][name]: Invalid element 

结论

因此,让我们回想一下使用SwiftyJSONModel获得的所有信息:

  1. JSON密钥现在是类型安全的
  2. 删除了所有样板代码
  3. 有更好的错误处理系统
  4. 易于访问的嵌套JSON

我非常期待您的反馈,当然,不要忘了在github上fork我