使用SwiftyJSONModel在Swift中输入安全的JSON
原始发布在这里:
https://gist.github.com/alickbass/b0683c175d6078d2a3bdb4ca005f56da
到处都是JSON
现在,每个应用都非常依赖通过互联网传输数据。 无需解释😉。 而且,当然,最受欢迎的格式是JSON。 在Swift
和Objective-C
我们需要先解析JSON,然后将其映射到本机对象,然后再使用它。
让我们更具体地考虑以下示例:
- 删除样板代码 。 因此,现在编译器知道我们使用了什么枚举,因此现在无需直接执行
PropertyKey.hobbies.rawValue
就可以使用:.hobbies
就是这样。 - 密钥现在是类型安全的 。 这意味着我们不再可以将随机原始字符串用作
JSON
键。 我们仅限于我们的PropertyKey enum
并且当我们尝试使用无效键时,编译器将给我们编译时错误。
看起来不错! 这仅仅是开始!
推断返回类型
除了类型安全键之外,我们不再需要编写stringValue
, intValue
等。框架知道在执行操作时应返回哪些类型 :
让firstName:字符串
您已经指定firstName
为String
。
所以现在代替 :
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获得的所有信息:
-
JSON
密钥现在是类型安全的 - 删除了所有样板代码
- 有更好的错误处理系统
- 易于访问的嵌套
JSON
我非常期待您的反馈,当然,不要忘了在github上fork我