2017-01-28 2 views
0

Я перешел с Swift2/AF3 на Swift3/AF4, и это был абсолютный кошмар. Xcode бросает ошибки «дополнительных аргументов», но это ложь, что делает невозможным для меня то, что является фактической ошибкой. В нескольких местах вокруг моего кода у меня естьAlamofire4 throwing "extra argument method" при использовании метода: .post

Alamofire.request(url, method: .put, parameters: parameters, 
encoding: JSONEncoding.default, headers: headers).validate().responseJSON() { response in ... } 

где url является string, method является одним из перечислений доступны, и parameters и headers являются [String: Any]. Но когда я меняю метод на .post, я получаю ошибку «дополнительного аргумента». Я не могу для жизни понять, что с этим не так. Я пробовал оба с .validate() и без.

let url = "myStringHere" 
let params = ["myString": myString] as [String: Any] 
let headers = ["Authorization": myString, "AnotherString": stringValue] as [String: Any] 

Alamofire.request(url, method: .post, parameters: params, 
    encoding: JSONEncoding.default, headers: headers).responseJSON(completionHandler: { response in ... } 

Я добавил разрыв строки для удобства чтения. validate() будет идти между request() и responseJSON, как я делаю для .put методов, которые я обновил до нового синтаксиса, не имея этой проблемы. Здесь у меня полная потеря.

Редактировать: просто хотел сказать, что я обеспечил типы, перейдя в запрос .post() и опцию + щелкнув переменные, чтобы дважды проверить их типы. Единственный, который не работает с опцией + клик, - method: .post. Я проверил другие ответы, но никто из них не работает, большинство из них - только вопросы от encoding: .json ->encoding: JSONEncoding.default, но вы можете ясно видеть, что это то, что у меня есть.

edit2: Пробовал переключение encoding к URLEncoding.httpBody но также не работали. Я получаю миллион ошибок от Alamofire, что мой Xcode не может даже обрабатывать их все сразу. Связано ли это с этим?

ответ

1

Тип аргументов «заголовки» - [String: String], а не [String: Any]. Вы попались в заблуждение об ошибке.

+0

О, мой бог, я думаю, что это исправлено. Мой код использует AF везде, поэтому у меня есть буквально сотни ошибок для исправления. Долго стучал головой о стену. Огромное спасибо!!! –

+0

Я бы рекомендовал сделать так называемый адаптер, например RequestHandler. Единственный объект, который использует API Alamofire. Таким образом, переход на новую версию Alamofire будет в одном месте, так как другие части вашего проекта будут использовать API адаптера. – SwiftGod

+0

Итак, что-то вроде создания моего MyRequest.request(), который принимает аргументы, необходимые для AF.request(), а затем, когда изменяется код AF, мне нужно только изменить эту функцию в классе MyRequest? –