Ios RxSwift自定义API包装器
我正试图用RxSwift包装我的API调用。我没有使用任何第三方库进行这些调用。我面临的问题是自定义错误对象。所有API调用都返回一个标准JSON错误对象。这是一个例子: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请求的
{
"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)}"
}
}