无法将类型T的值强制转换为T

信号

我正在尝试使用一种通用方法来AlamofireObjectMapper发送请求,其中输入是BasicMappable(通用类型),输出是响应

func sendRequest<T>(endPoint: String,
                    parameters: Parameters,
                    method: HTTPMethod,
                    mappingObject: T.Type) -> T where T : BaseMappable {
        var answer = T.self
        Alamofire.request(applicationBaseURL + endPoint,
                          method: method,
                          parameters: parameters,
                          headers: nil)
            .responseObject { ( response: DataResponse<T>) in
                let data = response.result.value
                answer = data as! T.Type
        }
        return answer as! T
    }

所以我在VC中使用这种方法:

let authResponse = requestHelper.sendRequest(endPoint: "/auth/users/create/",
                                             parameters: params,
                                             method: .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/",
                                  method: .post,
                                  parameters: params,
                                  headers: nil)
   .responseObject { (response: DataResponse<AnswerClass>) in
                        let loginRespone = response.result.value
                        for error in loginRespone?.errors ?? [] {
                            print(error.detail)
                            print(error.source)
                            print(error.status)
                        }

而且效果很好

但是我想让这种方法在整个项目中通用

如何正确地转换这些类型的值或还有其他方法?

卡姆兰

您需要使用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)
            }

    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

无法将类型“ [T]”的值转换为预期的参数类型“ [_]”

无法将类型“ A <T>”的值转换为预期的参数类型“ A <_>”

无法强制将“ [记录]”类型的值转换为“记录”类型

无法强制将'UIViewController'类型的值转换为'TableView'类型

无法将类型“ T”转换为布尔值

无法将类型“ UITableViewController”的值强制转换为“ UINavigationController”

无法将类型'__NSCFNumber'()的值强制转换为'NSArray'swift

无法将类型“ NSTaggedPointerString”的值强制转换为“ NSNumber”

无法将类型NSTaggedPointerString的值强制转换为NSDictionary

无法将类型'__NSCFConstantString'的值强制转换为'NSArray'

无法将类型'__NSCFData'的值强制转换为'NSDate'

无法将类型'__NSCFString'的值强制转换为'NSData'

值影响后,无法将类型强制转换为“布尔”

无法将类型UITableViewCell的值强制转换为“ ActuTblCell”

IQueryable <T> .OrderBy <T,对象>引发:无法将类型“ System.Int16”强制转换为类型“ System.Object”

通用方法将T强制转换为对象类型

无法将long类型转换为T,这里T是一个Enum的值

无法将“UnsafePointer<T>”类型的值转换为预期的参数类型“UnsafePointer<Int16>”

无法将类型“ NSFetchRequest <NSFetchRequestResult>”的值转换为指定的类型“ NSFetchRequest <T>”

Swift泛型错误:无法将类型'Type <T>'的值转换为预期的参数类型'Type <_>'

无法将类型'Result <Data,Error>'的值转换为关闭结果类型'Result <T,E>'

无法将“MyEnum<T.Type>”类型的值转换为预期的参数类型“MyEnum<_>”

Swift错误:强制转换时无法将B类型的值转换为A类型

将Task <T>强制转换为T

无法强制将类型'[String:Int]'的值转换为类型'Dictionary <_,_>'

无法将Google iOS Analytics(分析)强制类型'NSMutableDictionary'的值转换为类型[[NSObject:AnyObject]'

将通用T强制转换为Object []

无法将Person类型的对象强制转换为PersonViewModel类型

无法将类型'closure'强制转换为类型'character'的向量