Swift 无法调用非函数类型的值';httpurresponse?';-阿拉莫菲尔4.0

Swift 无法调用非函数类型的值';httpurresponse?';-阿拉莫菲尔4.0,swift,alamofire,swift3,swifty-json,Swift,Alamofire,Swift3,Swifty Json,我刚开始从swift 2.2->3.0转换我的旧项目。在这个过程中,我不得不将Alamofire更新到4.0版本,以获得对新swift版本的支持。我修的最多,但这个我没修好 有人能解释为什么最后一个return语句显示以下错误: 无法调用非函数类型“HTTPURLResponse”的值 具体而言: 返回响应(responseSerializer:responseSerializer,completionHandler:completionHandler) extension Alamofire.

我刚开始从swift 2.2->3.0转换我的旧项目。在这个过程中,我不得不将Alamofire更新到4.0版本,以获得对新swift版本的支持。我修的最多,但这个我没修好

有人能解释为什么最后一个return语句显示以下错误:

无法调用非函数类型“HTTPURLResponse”的值

具体而言:

返回响应(responseSerializer:responseSerializer,completionHandler:completionHandler)

extension Alamofire.DataRequest{
func responseTVArray(u)completionHandler:@escaping(DataResponse,Error?->Void)->Self{
让responseSerializer=DataResponseSerializer{请求,响应,数据,错误
guard error==nil else{return.failure(error!)}
guard let responseData=其他数据
{
let failureReason=“无法序列化数组,因为输入数据为零。”
let userInfo=[NSLocalizedFailureReasonErrorKey:failureReason]
let error=NSError(域:“UMAT”,代码:ErrorCode.DataSerializationFailed.rawValue,userInfo:userInfo)
return.failure(错误)
}
让JSONResponseSerializer=DataRequest.JSONResponseSerializer(选项:.allowFragments)
让result=JSONResponseSerializer.serializeResponse(请求、响应、响应数据、错误)
切换结果{
成功案例(let value):
让json=SwiftyJSON3.json(值)
让wrapper=TVWrapper()
wrapper.page=json[“page”].intValue
wrapper.totalPages=json[“total_pages”].intValue
wrapper.totalResults=json[“total_results”].intValue
var allTV:Array=Array()
让results=json[“results”]
对于结果中的jsonTV
{
让tv=tv(json:jsonTV.1,id:Int(jsonTV.0))
如果(tv.posterPath==“”)
{
持续
}
其他的
{
allTV.append(电视)
}
}
wrapper.results=allTV
return.success(包装器)
案例。失败(let错误):
return.failure(错误)
}
}
返回响应(responseSerializer:responseSerializer,completionHandler:completionHandler)
}

@Mat0谢谢你的评论。我之所以写这个答案,是因为我还有几个问题需要解决

下面是我在Swift 2.2中使用的方法

func responseSLJSON(completionHandler: Response<AnyObject, NSError> -> Void,
                             errorHandler: (String, Result<AnyObject, NSError>) -> NSError = Request.slError()) -> Self {

    let responseSerializer = ResponseSerializer<AnyObject, NSError> {
        request, response, data, error in

        let JSONSerializer = Request.JSONResponseSerializer(options: .AllowFragments)

        guard error == nil else {
            let errorResult = JSONSerializer.serializeResponse(request, response, data, nil)
            return .Failure(errorHandler(#function, errorResult))
        }

        return JSONSerializer.serializeResponse(request, response, data, error)
    }

    return response(responseSerializer: responseSerializer, completionHandler: completionHandler)
}

另外,
@escaping
对于
completionHandler
参数也是必不可少的。

您找到了解决方法吗?我有完全相同的问题。是的,尽管编译器没有告诉我们原因。真正的问题是DataResponse只接受一个模板类,而不再接受NSError/Error。因此应该是:(DataResponse)而不是(DataResponse,Error?)。错误代码应更改为使用swift 3 AFError
func responseSLJSON(completionHandler: Response<AnyObject, NSError> -> Void,
                             errorHandler: (String, Result<AnyObject, NSError>) -> NSError = Request.slError()) -> Self {

    let responseSerializer = ResponseSerializer<AnyObject, NSError> {
        request, response, data, error in

        let JSONSerializer = Request.JSONResponseSerializer(options: .AllowFragments)

        guard error == nil else {
            let errorResult = JSONSerializer.serializeResponse(request, response, data, nil)
            return .Failure(errorHandler(#function, errorResult))
        }

        return JSONSerializer.serializeResponse(request, response, data, error)
    }

    return response(responseSerializer: responseSerializer, completionHandler: completionHandler)
}
func responseSLJSON(completionHandler: @escaping (DataResponse<Any>) -> Void,
                    errorHandler: @escaping (String, Result<Any>) -> NSError = DataRequest.slError()) -> Self {

    let responseSerializer = DataResponseSerializer<Any> {
        request, response, data, error in

        let jsonSerializer = DataRequest.jsonResponseSerializer(options: .allowFragments)

        guard error == nil else {
            let errorResult = jsonSerializer.serializeResponse(request, response, data, nil)
            return .failure(errorHandler(#function, errorResult))
        }

        return jsonSerializer.serializeResponse(request, response, data, error)
    }

    return response(responseSerializer: responseSerializer, completionHandler: completionHandler)
}
public static func jsonResponseSerializer(
    options: JSONSerialization.ReadingOptions = .allowFragments)
    -> DataResponseSerializer<Any>