Swift RxAlamofire+;组合信号

Swift RxAlamofire+;组合信号,swift,alamofire,rx-swift,Swift,Alamofire,Rx Swift,我有一个简单的服务器请求,我想过滤并生成一个新的可观察的请求,用JSON数据验证该请求 我必须这样做,因为即使我的请求无效,我的服务器响应也会返回状态代码200。但我可以在Json响应中过滤此结果: <NSHTTPURLResponse: 0x7fb2d2617850> { URL: http://service-.herokuapp.com/--} { status code: 200, headers ... 服务器响应: <NSHTTPURLResponse: 0x7f

我有一个简单的服务器请求,我想过滤并生成一个新的可观察的请求,用JSON数据验证该请求

我必须这样做,因为即使我的请求无效,我的服务器响应也会返回状态代码200。但我可以在Json响应中过滤此结果:

<NSHTTPURLResponse: 0x7fb2d2617850> { URL: http://service-.herokuapp.com/--} { status code: 200, headers ...
服务器响应:

<NSHTTPURLResponse: 0x7fb2d2617850> { URL: http://service-.herokuapp.com/--} { status code: 200, headers ...
我的接收请求是:

let manager = Manager.sharedInstance
return manager.rx_request(method, "\(ApiRoutes.baseURL)\(path)", parameters: parameters)
// then validate server response
.flatMap{
     $0.validate(statusCode: 200..<300)
     .rx_responseData()
}
// then I create a new Observable validating the received json
.flatMapLatest { response, data in
     return Observable.create{ observer in
          let json = JSON(data: data)

          let statusCode = Int(json["system"]["code"].numberValue) ?? 400

          if 200..<300 ~= statusCode {
                observer.onNext((response,data))
          }else{
                observer.onError(NSError(domain: "test", code: 1, userInfo: nil))
          }
          observer.onCompleted()
          return NopDisposable.instance
     }
}
.observeOn(MainScheduler.instance)
let manager=manager.sharedInstance
return manager.rx\u请求(方法“\(apirouts.baseURL)\(path)”,参数:parameters)
//然后验证服务器响应
.平面图{

$0.验证(状态代码:200..一个可观察对象只能发送一个已完成事件或一个错误事件

出现错误后,您需要更新
flatMapLatest
代码以不发送
onCompleted()

if 200..<300 ~= statusCode {
    observer.onNext((response,data))
    observer.onCompleted()          
}else{
    observer.onError(NSError(domain: "test", code: 1, userInfo: nil))
}
这样,您就不需要自己处理
.Next
.Completed
事件的转发,而块只关注一件事,即生成错误

return manager.rx_request(method, "\(ApiRoutes.baseURL)\(path)", parameters: parameters)
// then validate server response
.flatMap{
     $0.validate(statusCode: 200..<300)
     .rx_responseData()
}
.map { (response, data) in
    let json = JSON(data: data)
    let statusCode = Int(json["system"]["code"].numberValue) ?? 400

    if 200..<300 ~= statusCode {
        return (response,data)
    } else {
        throw NSError(domain: "test", code: 1, userInfo: nil)
    }
}