Swift 无法将类型为T的值强制转换为T
我正在尝试使用Swift 无法将类型为T的值强制转换为T,swift,generics,alamofire,objectmapper,Swift,Generics,Alamofire,Objectmapper,我正在尝试使用AlamoFileObjectMapper创建一个通用方法,用于发送请求,其中输入是BasicMapable(通用类型),输出是响应 func sendRequest(端点:字符串, 参数:参数, 方法:HTTPMethod, 映射对象:T.Type)->T其中T:BaseMappable{ var-answer=T.self 请求(applicationBaseURL+端点, 方法:方法,, 参数:参数, 标题:无) .responseObject{(响应:DataRespons
AlamoFileObjectMapper
创建一个通用方法,用于发送请求,其中输入是BasicMapable
(通用类型),输出是响应
func sendRequest(端点:字符串,
参数:参数,
方法:HTTPMethod,
映射对象:T.Type)->T其中T:BaseMappable{
var-answer=T.self
请求(applicationBaseURL+端点,
方法:方法,,
参数:参数,
标题:无)
.responseObject{(响应:DataResponse)位于
让数据=response.result.value
答案=数据为!T.类型
}
返回答案为!T
}
所以我在VC中使用这种方法:
let authResponse=requestHelper.sendRequest(端点:“/auth/users/create/”,
参数:params,
方法:.post,
mappingObject:AnswerClass.self)
而且它构建得很好。
但当我试图发送请求时,我遇到了崩溃和错误
Could not cast value of type 'Travel.AuthController.AnswerClass.Type' (0x110186bf8) to 'Travel.AuthController.AnswerClass' (0x10de153b0).
2019-04-15 18:42:28.811494+0300 Travel[9951:596186] Could not cast value of type 'Travel.AuthController.AnswerClass.Type' (0x110186bf8) to 'Travel.AuthController.AnswerClass' (0x10de153b0).
我已经用VC做过了
Alamofire.request(applicationBaseURL+“/auth/users/create/”,
方法:.post,
参数:params,
标题:无)
.responseObject{(响应:DataResponse)位于
让loginRespone=response.result.value
对于loginRespone?中的错误。错误???[]{
打印(错误。详细信息)
打印(错误。来源)
打印(错误。状态)
}
而且效果很好
但是我想让这个方法在整个项目中通用
如何正确地强制转换这些类型的值,或者有其他方法吗?您需要使用下面的
completionHandler
来获取对象
func sendRequest<T>(endPoint: String,
parameters: Parameters,
method: HTTPMethod,
mappingObject: T.Type,
completion: (T?, Error?) -> Void) {
Alamofire.request(applicationBaseURL + endPoint,
method: method,
parameters: parameters,
headers: nil)
.responseObject { ( response: DataResponse<T>) in
switch response.result {
case .success(let value):
completion(value, nil)
case .failure(let error):
completion(nil, error)
}
}
}
func sendRequest(端点:字符串,
参数:参数,
方法:HTTPMethod,
mappingObject:T.类型,
完成:(T?,错误?->无效){
请求(applicationBaseURL+端点,
方法:方法,,
参数:参数,
标题:无)
.responseObject{(响应:DataResponse)位于
开关响应。结果{
成功案例(let value):
完成(价值,零)
案例。失败(let错误):
完成(无,错误)
}
}
}
谢谢你,@Kamran感谢你的帮助
我的最终解决办法是:
类请求帮助器{
func sendRequest(端点:字符串,
参数:参数,
方法:HTTPMethod,
mappingObject:T.类型,
完成:@escaping(\response:T?,\error:error?->Void)其中T:BaseMappable{
请求(applicationBaseURL+端点,
方法:方法,,
参数:参数,
标题:无)
.responseObject{(响应:DataResponse)位于
开关响应。结果{
成功案例(let value):
完成(价值,零)
案例。失败(let错误):
完成(无,错误)
}
}
}
}
@sigald Status 400表示API未成功。当错误代码为400时,您不能转到。success
案例。您可以提供有关您尝试实现的目标的更多信息吗?它是。例如“此电子邮件的用户已存在”。它是。成功但状态为400。我不知道为什么。感谢您的帮助!这完全可以