译者:Lanford3_3;校对:pmst;定稿:CMB
使用Swift解析JSON是件很痛苦的事。你必须考虑多个方面:可选类性、类型转换、基本类型(primitivetypes)、构造类型(constructedtypes)(其构造器返回结果也是可选类型)、字符串类型的键(key)以及其他一大堆问题。
对于强类型(well-typed)的Swift来说,其实更适合使用一种强类型的有线格式(wireformat)。在我的下一个项目中,我将会选择使用Google的protocolbuffers(这篇文章说明了它的好处)。我希望在得到更多经验后,写篇文章说说它和Swift配合起来有多么好用。但目前这篇文章主要是关于如何解析JSON数据——一种被最广泛使用的有线格式。
对于JSON的解析,已经有了许多优秀的解决方案。第一个方案,使用如Argo这样的库,采用函数式操作符来柯里化一个初始化构造器:
extensionUser:Decodable{staticfuncdecode(j:JSON)-DecodedUser{returncurry(User.init)^j
"id"*j
"name"*j
?"email"//Use?forparsingoptionalvalues*j
"role"//CustomtypesthatalsoconformtoDecodablejustwork*j
["