Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: Jordan ClarkОтветов: 1

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

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

swiftalamofireswift3

Ответы

Ответ 1 · Rob

В 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)
    }
}

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы