Тип выражения неоднозначен без дополнительного контекста в Alamofire.upload swift 3

В обновленном Alamofire 4.0.0 не упоминается, как поместить Httpmethod и Httpheaders в загрузку с помощью multipartFormData. Вот почему я погуглил и нашел решение в этом вопросе о стеке. Но проблема в том, что я сделал то же самое, что и этот ответ, затем получил следующее сообщение об ошибке, и сборка не удалась. Пожалуйста, помогите мне, как это решить.

Тип выражения неоднозначен без дополнительного контекста

Вот моя кодировка:

let URL = try! URLRequest(url: Config.imageUploadURL, method: .post, headers: headers)

Alamofire.upload(
    multipartFormData: { multipartFormData in
        multipartFormData.append(self.imageData, withName: "image", fileName: "file.png", mimeType: "image/png")
    },
    to: URL,
    encodingCompletion: { encodingResult in
        switch encodingResult {
        case .success(let upload, _, _):
            upload.responseJSON { response in
                if((response.result.value) != nil) {

                } else {

                }
            }
        case .failure( _):

        }
    }
)

person PPShein    schedule 30.10.2016    source источник
comment
Здравствуйте, что такое Config.imageUploadURL? Как сделать urlRequestConvertible в Alamofire 4?   -  person Sam    schedule 02.11.2016
comment
@Sam читайте ниже ответ, который я отметил как правильный ответ. Если еще не ясно, задайте вопрос, и я отвечу за вас.   -  person PPShein    schedule 03.11.2016


Ответы (3)


Alamofire.upload(multipartFormData:to:encodingCompletion:) принимает URLConvertible в качестве аргумента to:. Вместо этого вы должны использовать Alamofire.upload(multipartFormData:with:encodingCompletion:), который принимает URLRequestConvertible в качестве аргумента with:.

Я думаю, что ваше имя аргумента URL совпадает с типом URL(), что помогает создавать странные ошибки компилятора.

Для меня компилируется следующее:

let url = try! URLRequest(url: URL(string:"www.google.com")!, method: .post, headers: nil)

Alamofire.upload(
    multipartFormData: { multipartFormData in
        multipartFormData.append(Data(), withName: "image", fileName: "file.png", mimeType: "image/png")
    },
    with: url,
    encodingCompletion: { encodingResult in
        switch encodingResult {
        case .success(let upload, _, _):
            upload.responseJSON { response in
                if((response.result.value) != nil) {

                } else {

                }
            }
        case .failure( _):
            break
        }
    }
)
person Jon Brooks    schedule 30.10.2016
comment
Отлично, я пропустил это, чтобы вместо этого использовать with. Спасибо. - person PPShein; 30.10.2016
comment
пусть параметры: Параметры = [user_id: user_id, section_id: section_id, день: день, userpost: видео] вместе с URL-запросом, как передать эти параметры, спасибо - person Malleswari; 06.04.2018
comment
Я не могу передать int как тип int напрямую, помогите мне, пожалуйста. - person Malleswari; 06.04.2018

Для меня ошибка сборки была вызвана multipartFormData.appendBodyData(). После замены на multipartFormData.append() проблема решилась.

person Florian Blum    schedule 21.05.2017

Я получил ту же ошибку, потратив много времени, я обнаружил, что проблема была в следующем:

Я передавал MutableURLRequest вместо передачи объекта URLRequest. Вот почему я получил эту ошибку. После приведения его к URLRequest он начинает работать.

person Mehul Thakkar    schedule 16.08.2017