A (Helpful) Alamofire 4 Migration Guide

It had been a while since the last time an open-source library had made me want to literally throw my laptop into the ocean; this was until being forced to upgrade to Alamofire 4.0 while moving over to Swift 3. The Swift interpreter is going to trick you into looking for the wrong kind of error.

Extra argument 'method' in call

I'm clearly not the only person who was pulling their hair out with Xcode complaining about an Extra argument 'method' in call, when I creating what looked like an acceptable request object.

Any time one argument is of the wrong type, the Swift interpreter here believes that you're wrongly using request(urlRequest:URLRequestConvertible) and therefore believes there's an extra method: argument.

So what's the issue? Well, there are actually two.

.JSON is no longer a valid argument to encoding:; the correct replacement is JSONEncoding.default. Also, HTTP method names are now lowercase, so we need to replace .GET with .get. Xcode was never going to tell you this, though.

Upload and progress

The syntax for uploads has changed in Alamofire 4 to read a bit nicer, with a new argument label: to. There's another initially inexplicable error I and others have encountered: Cannot call value of non-function type 'Progress'.

I found it necessary to remove the brackets indicating the call to uploadProgress. Here's a working call: