Skip to content

Instantly share code, notes, and snippets.

@erica
Last active September 29, 2017 14:19
Show Gist options
  • Star 22 You must be signed in to star a gist
  • Fork 5 You must be signed in to fork a gist
  • Save erica/baa8a187a5b4796dab27 to your computer and use it in GitHub Desktop.
Save erica/baa8a187a5b4796dab27 to your computer and use it in GitHub Desktop.
import Foundation
/// NSURLSession synchronous behavior
/// Particularly for playground sessions that need to run sequentially
public extension NSURLSession {
/// Return data from synchronous URL request
public static func requestSynchronousData(request: NSURLRequest) -> NSData? {
var data: NSData? = nil
let semaphore: dispatch_semaphore_t = dispatch_semaphore_create(0)
let task = NSURLSession.sharedSession().dataTaskWithRequest(request, completionHandler: {
taskData, _, error -> () in
data = taskData
if data == nil, let error = error {print(error)}
dispatch_semaphore_signal(semaphore);
})
task.resume()
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER)
return data
}
/// Return data synchronous from specified endpoint
public static func requestSynchronousDataWithURLString(requestString: String) -> NSData? {
guard let url = NSURL(string:requestString) else {return nil}
let request = NSURLRequest(URL: url)
return NSURLSession.requestSynchronousData(request)
}
/// Return JSON synchronous from URL request
public static func requestSynchronousJSON(request: NSURLRequest) -> AnyObject? {
guard let data = NSURLSession.requestSynchronousData(request) else {return nil}
return try? NSJSONSerialization.JSONObjectWithData(data, options: [])
}
/// Return JSON synchronous from specified endpoint
public static func requestSynchronousJSONWithURLString(requestString: String) -> AnyObject? {
guard let url = NSURL(string: requestString) else {return nil}
let request = NSMutableURLRequest(URL:url)
request.HTTPMethod = "GET"
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
return NSURLSession.requestSynchronousJSON(request)
}
}
@tkoak
Copy link

tkoak commented Jan 21, 2016

Very useful!

Copy link

ghost commented Apr 2, 2016

thanks, i will convert these into objc

@mbxymail
Copy link

Awesome save me a lot of time!!!!!!!!

@almatri
Copy link

almatri commented Nov 11, 2016

Great, works well

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