2016-01-28 15 views
3

我知道你可以添加一个状态代码和内容类型验证,但我真的很喜欢基于结果的内容可以写我自己的验证 - 基本上我想以确保我回来的JSON包含一些字段,并且它们的值是有效的。定制,内容验证器Alamofire(斯威夫特)

目前设计的应用程序的方式是有一个Server类来处理所有api调用,并且响应对象返回给所有调用它的人,以便他们可以执行其逻辑/更新ui等

现在我对所有的请求都有一个状态码验证器,所以我不需要在所有外部都有它,但我有几个apis,需要自定义验证逻辑,这意味着我必须添加它在所有的称呼,我不能用这个惊人的语法地方:

switch resp.result { 
    case .Success(let value): 
     print("yay") 
    case .Failure: 
     print("nay") 
} 

我很乐意回答任何/指针,可以帮助我找到一个解决方案,
谢谢大家这么多提前! :)

回答

3

彼时我有这个确切的同样的问题,发现你想做的事就是写自己的响应串并停止使用.validate()。

我使用的串行非常,非常接近出的现成的JSONResponseSerializer,除了我作出了错误的支票。

我做的股票串行的唯一变化是DO-catch语句中:

do { 
    let JSON = try NSJSONSerialization.JSONObjectWithData(validData, options: options) 
    if let responseDict = JSON as? NSDictionary, apiError = NSError.APIErrorFromResponse(responseDict) { 
     return .Failure(apiError) 
    } 
    return .Success(JSON) 
} catch { 
    return .Failure(error as NSError) 
} 

APIErrorFromResponseNSError简单的扩展方法是检查JSON的错误解释,并填充一个自定义NSError出那个。

希望这点你在正确的方向,如果你还没有找到一个解决办法!

+0

这是一个非常酷的想法,我会试试看,谢谢! :) –

+0

我在哪里可以找到开箱即用的JSONResponseSerializer的源代码,以便查看完整的实现? – Elise

+0

https://github.com/Alamofire/Alamofire/blob/master/Source/ResponseSerialization.swift 查找// MARK: - JSON在该文件上,你会看到默认的JSON序列化Alamofire。除了你在这里看到的变化,我的几乎完全一样。 扩展Request后,您还需要扩展DataRequest以定义一种方法来使用新的序列化函数,这与他们的JSON序列化相同。 – Stakenborg