【问题标题】:Generic paramater could not be inferred无法推断通用参数
【发布时间】:2017-06-21 12:49:37
【问题描述】:

这里我有一个函数,它创建一个名为 T

的泛型类型的 DataResponseSerializer
extension DataResponseSerializer {
     static func mappableObjectSerializer<T: Mappable>() -> DataResponseSerializer<T> {...}
}

另外一个扩展有一个函数来做请求,它返回一个泛型类型叫做SuccessObjectType,在这个我调用上面的函数。

public extension DataRequest { 
      @discardableResult func requestObject<SuccessObjectType: Mappable>(onSuccess success: @escaping  ((SuccessObjectType?) -> Void),
                      onFailure failure: @escaping ((NSError?) -> Void),
                      onCompletion completion: (() -> Void)? = nil) -> Self {

    let responseSerializer = DataResponseSerializer<SuccessObjectType>.mappableObjectSerializer()

    return response(queue: nil, responseSerializer: responseSerializer, completionHandler: { (response) in
        switch response.result {...})
}

}

这个想法是将序列化程序与请求本身分离,这样我就可以在遗留项目上实现 UnitTest,但由于某种原因我得到了错误

无法推断通用参数“T”

上线:

let responseSerializer = DataResponseSerializer<SuccessObjectType>.mappableObjectSerializer()

【问题讨论】:

    标签: ios swift generics alamofire


    【解决方案1】:

    感谢Cannot explicitly specialize a generic function这个答案,我可以找到解决方法,这很简单,从这里开始:

    let responseSerializer = DataResponseSerializer<SuccessObjectType>.mappableObjectSerializer()
    

    到这里:

    let responseSerializer: DataResponseSerializer<SuccessObjectType> = DataResponseSerializer<SuccessObjectType>.mappableObjectSerializer()
    

    它的作用是对函数的预期返回进行类型转换,这样编译器就知道函数的期望值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-17
      • 2015-09-22
      相关资源
      最近更新 更多