Ios RxSwift自定义API包装器

Ios RxSwift自定义API包装器,ios,swift,rx-swift,Ios,Swift,Rx Swift,我正试图用RxSwift包装我的API调用。我没有使用任何第三方库进行这些调用。我面临的问题是自定义错误对象。所有API调用都返回一个标准JSON错误对象。这是一个例子: { "error": { "code": 11001, "message": "Bad request", "errors": [ "The accesstoken field is required." ] } } 这是将发送API请求的

我正试图用RxSwift包装我的API调用。我没有使用任何第三方库进行这些调用。我面临的问题是自定义错误对象。所有API调用都返回一个标准JSON错误对象。这是一个例子:

{
  "error": {
     "code": 11001,
     "message": "Bad request",
     "errors": [
            "The accesstoken field is required."
            ]
  }
}
这是将发送API请求的代码

func CallAPI(withParameters parameters: [String : AnyObject]?,
             queryToSearchFor query: String?) -> Observable<AnyObject?>? {

    return Observable.create({ (observable) -> Disposable in
        ServerInterface.getRequest(
            withBaseURl: nil,
            withFunctionName: "util/load_companies/" + (query ?? ""),
            havingFunctionsParameters: nil,
            andHeaderParameters: parameters,
            withCompletionHandler: { (response) in
                guard response.responseCode == kSuccessCode else {
                    observable.on(.error( response.responseError  as! Error))
                    return
                }

                observable.on(.next(response.responseData))
                observable.on(.completed)
        })
        return Disposables.create {
            print("Request Cancelled")
        }
    })

}
这是我的自定义APIResponse对象。它包含ServerInterfaceError类型的a属性
responseError

class ServerInterfaceResponse: NSObject {
    var responseCode: Int?
    var responseData: AnyObject?
    var responseMessage: String?
    var responseError: ServerInterfaceError?

    func response(_ code: Int?, data: AnyObject?, message: String?, error: ServerInterfaceError?) -> ServerInterfaceResponse {
         let serverResponse = ServerInterfaceResponse.init()
         serverResponse.responseCode = code
         serverResponse.responseData = data
         serverResponse.responseMessage = message
         serverResponse.responseError = error

        return serverResponse
    }

    override var description: String {
      return "Response Code = \(responseCode) | Response Data = \(responseData) | Response Message = \(responseMessage) | Response Error = {\(responseError)}"
    }
}

如何将自定义对象发送到(.error())

上的
可观察对象“无法将自定义错误对象转换为错误”有什么问题?你没说问题是什么。编译时错误?运行时错误?您应该能够将自定义错误作为错误发送,但是,您需要将其转换回自定义类型,因为RxSwift只支持简单的
error
@wasim错误,错误消息提到
ServerInterfaceResponseError
。它的声明是什么样子的?它必须采用
错误
协议。@AntonBronnikov很抱歉它不是
服务器接口响应错误
。这是服务器接口错误。问题中提供了该类,
ServerInterfaceResponse
看起来像什么?特别是,它的输入参数
response
,它的类型和类型的声明是什么?我已经更新了这个问题并添加了
ServerInterfaceResponse
class ServerInterfaceResponse: NSObject {
    var responseCode: Int?
    var responseData: AnyObject?
    var responseMessage: String?
    var responseError: ServerInterfaceError?

    func response(_ code: Int?, data: AnyObject?, message: String?, error: ServerInterfaceError?) -> ServerInterfaceResponse {
         let serverResponse = ServerInterfaceResponse.init()
         serverResponse.responseCode = code
         serverResponse.responseData = data
         serverResponse.responseMessage = message
         serverResponse.responseError = error

        return serverResponse
    }

    override var description: String {
      return "Response Code = \(responseCode) | Response Data = \(responseData) | Response Message = \(responseMessage) | Response Error = {\(responseError)}"
    }
}