我是一名刚接触 swift 3 编程的 Android 开发人员,我正在使用 Alamofire为了进行 api 调用并避免繁琐的 json 配对,我正在使用 AlamofireObjectMapper图书馆。
我有一个 ApiController
,它有一个进行 api 调用的函数,下面是其代码:
public static func makePostRequest<T: Mappable>(url: String, params: Parameters, networkProtocol: NetworkProtocol, responseClass: T){
let headers = getHeaders()
networkProtocol.showProgress()
Alamofire.request(url, method: .post, parameters: params, encoding: JSONEncoding.default, headers: headers)
.validate()
.responseObject{
(response: DataResponse<T>) in
switch(response.result){
case .success(_):
networkProtocol.hideProgress()
networkProtocol.onResponse(response: response)
break
case .failure(_):
networkProtocol.hideProgress()
networkProtocol.onErrorResponse(response: response)
break
}
}
下面是我的模型类:
import ObjectMapper
class BaseResponse: Mappable {
required init?(map: Map) {
}
func mapping(map: Map) {
}
}
下面是类进行 api 调用的函数:
public static func callSomeApi(params: Parameters, networkProtocol: NetworkProtocol){
ApiHelper.makePostRequest(url: AppConstants.URLs.API_NAME, params: params, networkProtocol: networkProtocol, responseClass: BaseResponse)
}
现在错误出现在下面一行
ApiHelper.makePostRequest(url: AppConstants.URLs.API_NAME, params: params, networkProtocol: networkProtocol, responseClass: BaseResponse)
它说参数类型“BaseResponse.Type”不符合预期类型“Mappable”
请有人帮我解决这个问题,这个问题已经困扰了很长一段时间了。
最佳答案
这是使用对象映射的引用请求
import Alamofire
import ObjectMapper
import AlamofireObjectMapper
func requestUrl<T:Mappable>(url: URLRequestConvertible, withSuccess success:@escaping (_ response: T) -> ()) {
Utils.addHUD()
Alamofire.request(url).validate().responseObject { (response :DataResponse<T>) in
Utils.hideHUD()
guard response.result.isSuccess else{
Utils.showAlert(message: (response.result.error?.localizedDescription)!, action: {
})
return
}
let root:RootClass = response.result.value as! RootClass
if root.status == "Fail"{
Utils.showAlert(message: (root.msg!), action: {
})
}else{
success(response.result.value!)
}
}
}
这是我要映射的类(class)
import ObjectMapper
class RootClass : NSObject, Mappable{
var data : [String : Any]?
var msg : String?
var status : String?
class func newInstance(map: Map) -> Mappable?{
return RootClass()
}
required init?(map: Map){
super.init()
}
private override init(){
super.init()
}
func mapping(map: Map)
{
data <- map["data"]
msg <- map["msg"]
status <- map["status"]
}
}
关于ios - Alamofire 请求中的响应类类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43754468/