gpt4 book ai didi

ios - 无法推断 AlamofireObjectMapper 通用参数 'T'

转载 作者:行者123 更新时间:2023-11-28 10:48:04 28 4
gpt4 key购买 nike

我正在尝试建立一个系统,让我的所有 api 请求路径都通过一个函数并将它们映射到相应的对象

func sendApi<T>(url : String , httpMethod : HTTPMethod = .get,
parameters: Parameters? = nil,
encoding: ParameterEncoding = URLEncoding.default,
headers: HTTPHeaders? = nil , callbackSuccess : @escaping (T) -> () , callbackFailure : @escaping (T) -> ()) where T : Mappable {

Alamofire.request(url, method: httpMethod, parameters: parameters , encoding: encoding, headers: headers).responseObject{(response: (DataResponse<T>))in

switch response.result {

case .success :
let result = Mapper<T>().map(JSONObject: response.value)!
callbackSuccess(result)
break;
case .failure(let error):
if((error as NSError).code == ErrorResponse.noInternetConnection){
// errorCallBack(ErrorResponse.noInternetConnectionString)
}
// errorCallBack(error.localizedDescription)
print(error.localizedDescription)
break;
}
}
}

但是当我尝试在 get 方法中调用函数时,例如

 func testApiGet(url: String , packageId : Int ,callback :@escaping (myObject) -> Void , errorCallBack : @escaping (String) -> Void ){

let token = spm.getUserToken()
let headers = ["X-Auth-Token" : token]
let newUrl = url + "?packageId=" + String(packageId)

sendApi(url: url, httpMethod: HTTPMethod.get , parameters: nil, encoding: JSONEncoding.default, headers: headers, callbackSuccess: {(jsonObject) in

} , callbackFailure:{ (jsonObject)in

})
}

我收到错误“无法推断通用参数‘T’”

当然我可以设置对象的类型

(response: (DataResponse<myObject>)

然后错误就会消失。

我的问题是如何解决这个错误以使其完全通用

最佳答案

错误处理程序和成功处理程序具有相同类型 T: Mappable 没有意义。您只会在成功处理程序中获得一个映射对象。错误处理程序应该类似于 (Error) -> ()

其次,你的函数在闭包参数的参数类型方面是通用的,但是当你调用函数时你没有指定类型:

 sendApi(url: url, httpMethod: HTTPMethod.get , parameters: nil, encoding: JSONEncoding.default, headers: headers, callbackSuccess: {(jsonObject) in

} , callbackFailure:{ (jsonObject)in

})

因此,编译器不知道您期望的是什么类型,这就是为什么它会提示无法在此处推断类型的原因。您需要明确提供参数类型,因为这决定了调用泛型的哪个版本:

 sendApi(url: url, httpMethod: HTTPMethod.get , parameters: nil, encoding: JSONEncoding.default, headers: headers, callbackSuccess: {(jsonObject: MyMappableType) in

} , callbackFailure:{ (error: Error)in

})

关于ios - 无法推断 AlamofireObjectMapper 通用参数 'T',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47660713/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com