Tag: Evreflection

使用Alamofire和EVReflection自动映射和解析JSON

我经常使用Alamofire进行HTTP联网,这是用Swift编写的流行联网库。 因此,它是极其强大的库,易于使用,但是在进行网络操作时,我经常需要抽象层来封装Alamofire而不是直接调用它。 我在过去的项目中确实使用Moya作为抽象,所以基本上,它提供了Manager类来定义端点,请求参数等的明确用法。因此,我确实创建了自己的Manager单例来管理这些东西。 在设计模型时,我们需要为每个请求的JSON值实现映射,并为我的模型实现响应周期 ,但是如果响应JSON结构经常更改(需求可以快速更改,可以快速转换请求/响应),那将是痛苦的。 我以前有在Swift中使用Reflection的经验,所以确实有机会在新项目中尝试EVReflection。 什么是EVReflection? EvReflection是一个带有反射功能的Swift帮助程序库,该功能支持NSCoding,Printable,Hashable,Equatable和JSON。 将基于NSObject的对象解析为字典。 将字典解析回一个对象。 从字符串值创建一个类并获取一个类的字符串值。 支持NSCoding方法encodeWithCoder和decodeObjectWithCoder 使用所有属性时,支持可打印,可哈希和等于。 (支持Swift 1.2中的Set) 将对象解析为JSON字符串,并将JSON字符串解析为对象 从EVReflection中裁剪 实施请求/响应模型 首先,我们需要设置从EVReflection(EVObject)基类继承的请求/响应模型。 适用于所有请求的BaseRequest,适用于应用程序中所有响应的BaseResponse以及用于解析错误JSON结构 (如果存在)的ErrorResponse (如果接收到用于警报,通知等的错误响应对象) 因此,如果JSON中包含错误有效负载以进行映射,则需要对其进行解析。 我们可以传递额外的默认值,例如应用程序的当前版本,内部版本号或任何其他数据。 然后,在下面的示例中,我们可以简单地声明从BaseRequest / BaseResponse类继承的Request / Response模型。 因此, 从EVObject继承的模型将自动进行映射 。 另外,如果您需要使用某些值作为请求/响应,我们可以通过实例化类来设置默认值 最后,定义一个采用请求参数(BaseRequest)和完成处理程序响应(BaseResponse)的方法为我们提供了完成处理程序。 (我们也可以在此处进行网络状态检查等。) 好处 我们不需要为模型编写映射或为JSON响应(以及请求)使用某些映射库。 我们确保正确定义了请求/响应周期 ,我们完全知道请求的内容,并且知道响应应该做什么。 我们确实使用可达性检查了网络状态 (您可以自己实施) 我们通过Alamofire的validate()方法确保它是经过验证的响应。 它会自动验证 200…299 范围 内的状态码 ,并且如果提供的话,响应的Content-Type标头与请求的Accept标头匹配。 我们有AccountResponse(BaseResponse)和错误(如果有)作为响应 我们使用了AlamofireJSONToObjects库, 该库使用EVReflection (作为Alamofire扩展名) 将JSON响应数据转换为Swift对象 。 我们拥有干净,可测试的实现,可以重复使用以支持不同的API请求。 这是创建请求的示例方法 […]