【发布时间】:2017-09-30 22:56:35
【问题描述】:
我是 swift 3 编程新手,我正在使用 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)
上面写着Argument type 'BaseResponse.Type' does not conform to expected type 'Mappable'
有人请帮我解决这个问题,现在卡在这个问题上很长一段时间了。
【问题讨论】:
-
你能显示你的'responseClass'的代码吗?此外,您应该将您的类命名为 ResponseClass。
-
您是否复制粘贴了此代码?
responseClass应该是请求结果将被映射到的类的名称。将其替换为 this format 之后的类名。 -
@Toldy 我希望类名是动态的,这就是为什么我想接受响应类名作为参数
-
哦,对不起,我没有看到你被拿了类名作为参数。然后
responseClass是您的变量的名称。T是它的类型。把<responseClass>改成<T>,把makePostRequest<T>改成makePostRequest<T: Mappable>(因为responseObject只接受遵守可映射协议的对象) -
您是否添加了好的导入 like here ?
Mappable是在 ObjectMapper 中定义的,如果我没记错的话
标签: ios swift swift3 alamofire objectmapper