Skip to content

Instantly share code, notes, and snippets.

@mtackes
Last active December 7, 2018 04:03
Show Gist options
  • Select an option

  • Save mtackes/510a40ac92f2a7bf75c3 to your computer and use it in GitHub Desktop.

Select an option

Save mtackes/510a40ac92f2a7bf75c3 to your computer and use it in GitHub Desktop.
An basic example of using an upload task with a completion handler.
import Cocoa
let session = NSURLSession.sharedSession()
let request = NSURLRequest(URL: NSURL(string: "http://example.com")!)
let dataToUpload = "Some Arbitrary Data".dataUsingEncoding(NSUTF8StringEncoding)
let uploadTask = session.uploadTaskWithRequest(request, fromData: dataToUpload,
completionHandler: { (responseData, response, error) in
// Check on some response headers (if it's HTTP)
if let httpResponse = response as? NSHTTPURLResponse {
switch httpResponse.statusCode {
case 200..<300:
print("Success")
case 400..<500:
print("Request error")
case 500..<600:
print("Server error")
case let otherCode:
print("Other code: \(otherCode)")
}
}
// Do something with the response data
if let
responseData = responseData,
responseString = String(data: responseData, encoding: NSUTF8StringEncoding) {
print("Server Response:")
print(responseString)
}
// Do something with the error
if let error = error {
print(error.localizedDescription)
}
})
uploadTask.resume()
@WintonChur
Copy link

Updated one:

    let session = URLSession.shared
    let request = NSURLRequest(url: NSURL(string: "http://example.com")! as URL)
    let dataToUpload = "Some Arbitrary Data".data(using: String.Encoding.utf8)
    
    let uploadTask = session.uploadTask(with: request as URLRequest, from: dataToUpload,
                                                   completionHandler: { (responseData, response, error) in
                                                    
                                                    // Check on some response headers (if it's HTTP)
                                                    if let httpResponse = response as? HTTPURLResponse {
                                                        switch httpResponse.statusCode {
                                                        case 200..<300:
                                                            print("Success")
                                                        case 400..<500:
                                                            print("Request error")
                                                        case 500..<600:
                                                            print("Server error")
                                                        case let otherCode:
                                                            print("Other code: \(otherCode)")
                                                        }
                                                    }
                                                    
                                                    // Do something with the response data
                                                    if let
                                                        responseData = responseData,
                                                        let responseString = String(data: responseData, encoding: String.Encoding.utf8) {
                                                        print("Server Response:")
                                                        print(responseString)
                                                    }
                                                    
                                                    // Do something with the error
                                                    if let error = error {
                                                        print(error.localizedDescription)
                                                    }
    })
    
    uploadTask.resume()

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment