Я перешел с 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 не может даже обрабатывать их все сразу. Связано ли это с этим?
О, мой бог, я думаю, что это исправлено. Мой код использует AF везде, поэтому у меня есть буквально сотни ошибок для исправления. Долго стучал головой о стену. Огромное спасибо!!! –
Я бы рекомендовал сделать так называемый адаптер, например RequestHandler. Единственный объект, который использует API Alamofire. Таким образом, переход на новую версию Alamofire будет в одном месте, так как другие части вашего проекта будут использовать API адаптера. – SwiftGod
Итак, что-то вроде создания моего MyRequest.request(), который принимает аргументы, необходимые для AF.request(), а затем, когда изменяется код AF, мне нужно только изменить эту функцию в классе MyRequest? –