Не удается вызвать значение нефункционального типа «HTTPURLResponse?» (Аламофайр 4.0) [Свифт 3.0]

Я получаю эту ошибку:

«Невозможно вызвать значение типа HTTPURLResponse, не являющегося функцией?»

по разделу:

.response { (request, response, data, error)

и мне было интересно, может ли кто-нибудь помочь мне с этим.

Alamofire.download(urlToCall, method: .get) { temporaryURL, response in
    if FileManager.default.fileExists(atPath: finalPath!.path!) {
        do {
            try FileManager.default.removeItem(atPath: finalPath!.path!)
        } catch {
            // Error - handle if required
        }
    }
    return finalPath!

    }
    .response { (request, response, data, error) in

        if error != nil {

        }
        var myDict: NSDictionary?
        let path = finalPath!
        myDict = NSDictionary(contentsOf: path)

        if let dict = myDict {
            success(dict)
        }

        if finalPath != nil {
            //doSomethingWithTheFile(finalPath!, fileName: fileName!)
        }
}

person Jordan Clark    schedule 14.09.2016    source источник
comment
Возможно, связано: stackoverflow.com/q/32932748/3303915   -  person Οurous    schedule 15.09.2016
comment
Неа. Аналогичная проблема, но не та же. Разные версии свифта и аламофайра.   -  person Jordan Clark    schedule 15.09.2016
comment
Вы ориентируетесь на iOS 8? Я не знаю причину, но Alamofire для Swift 3 должен быть как минимум iOS 9. С уважением   -  person Jordi Gámez    schedule 15.09.2016
comment
@JordanClark - Возможно, разные версии, но проблема та же. Ваши параметры закрытия неверны.   -  person Rob    schedule 15.09.2016
comment
Кстати, ваш сервер действительно отправляет обратно plist для NSDictionary? Это немного необычно. Обычно это JSON или что-то в этом роде.   -  person Rob    schedule 15.09.2016
comment
Вместо этого я должен использовать responseJSON или responseData   -  person onmyway133    schedule 21.10.2016


Ответы (1)


В Alamofire 4 метод .response принимает замыкание с одним параметром, DefaultDownloadResponse.

Кстати, если вы собираетесь использовать свой собственный путь для загрузки, меня смущает ваш return finalPath!, потому что Alamofire 4 ожидает, что вы вернете кортеж, состоящий из URL-адреса файла и параметров, из которых один из параметров .removePreviousFile, что избавляет вас от необходимости вручную удалять его.

Например:

Alamofire.download(urlToCall, method: .get) { temporaryURL, response in
    let finalURL: URL = ...

    return (destinationURL: finalURL, options: .removePreviousFile)
}.response { response in
    if let error = response.error {
        success(nil)
        return
    }

    if let fileURL = response.destinationURL, let dictionary = NSDictionary(contentsOf: fileURL) {
        success(dictionary)
    } else {
        success(nil)
    }
}
person Rob    schedule 15.09.2016