mirror of
https://github.com/mas-cli/mas
synced 2024-11-29 15:00:25 +00:00
587d84a671
- Url encode appName - Add attribution for synchronous NSURLSession code - Run script/sort - Add ResultKeys struct for json keys
63 lines
2.4 KiB
Swift
63 lines
2.4 KiB
Swift
//
|
|
// NSURLSession+Synchronous.swift
|
|
// mas-cli
|
|
//
|
|
// Created by Michael Schneider on 4/14/16.
|
|
// Copyright © 2016 Andrew Naylor. All rights reserved.
|
|
//
|
|
|
|
// Synchronous NSURLSession code found at: http://ericasadun.com/2015/11/12/more-bad-things-synchronous-nsurlsessions/
|
|
|
|
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)
|
|
}
|
|
}
|
|
|
|
public extension String {
|
|
|
|
/// Return an URL encoded string
|
|
func URLEncodedString() -> String? {
|
|
let customAllowedSet = NSCharacterSet.URLQueryAllowedCharacterSet()
|
|
return self.stringByAddingPercentEncodingWithAllowedCharacters(customAllowedSet)
|
|
}
|
|
}
|
|
|