class Api{
static let shared = Api()
private let provider = MoyaProvider<MultiTarget>(plugins:[NetworkLoggerPlugin(),CryptoPlugin()])
public func send<T : Codable>(_ target : TargetType, type : T.Type) -> Observable<T?> {
let mTarget = MultiTarget(target)
return provider.rx.request(mTarget)
.asObservable()
.filterSuccessfulStatusCodes()
.map { result in
print(String(data: result.data, encoding: .utf8) ?? "111")
let responseModel = try JSONDecoder().decode(ResponseModel<T>.self, from: result.data)
if(responseModel.code != 0){//bussiness error
let msg = (responseModel.msgCode != nil) ? Localized(key: "\(responseModel.msgCode!)") : responseModel.msg
UIApplication.shared.currentKeyWindow()?.showHUD(msg)
return nil
}
if(responseModel.data == nil){
responseModel.data = T.Type()
}
return responseModel.data
}
.catchAndReturn(T.self as? T)
}
}
问题是有时即使没有http错误和业务错误,服务器端也会返回nil数据。在本例中,我想向订阅者返回一个空实例。这就是为什么我有这个代码:responseModel.data = T.Type()
但是正如你所看到的,有一个编译错误,我不知道发生了什么。
感谢任何建议:)
只需删除有问题的行即可。您已经确定有时服务器可以返回 nil,因此允许此函数返回 nil...
.map { result in
print(String(data: result.data, encoding: .utf8) ?? "111")
let responseModel = try JSONDecoder().decode(ResponseModel<T>.self, from: result.data)
if responseModel.code != 0 { //bussiness error
let msg = (responseModel.msgCode != nil) ? Localized(key: "\(responseModel.msgCode!)") : responseModel.msg
UIApplication.shared.currentKeyWindow()?.showHUD(msg)
return nil
}
return responseModel.data
}