Skip to content

Instantly share code, notes, and snippets.

@tylercasson
Forked from aqlla/main.swift
Last active August 29, 2015 14:07
Show Gist options
  • Save tylercasson/57132899a6195dffae76 to your computer and use it in GitHub Desktop.
Save tylercasson/57132899a6195dffae76 to your computer and use it in GitHub Desktop.
import Foundation
typealias JSON = AnyObject
typealias JSONDict = Dictionary<String, JSON>
typealias JSONArray = Array<JSON>
struct User {
let id: Int
let name: String
let email: String
}
final class Box<A> {
let value: A
init(_ value: A) {
self.value = value
}
}
enum Result<A> {
case Error(NSError)
case Value(Box<A>)
}
func makeRequest() {
println("makeRequest called")
let url = NSURL(string: "http://104.131.48.79/api/user/test")
getUser(url) { result in
switch result {
case let .Value(boxedValue):
println(".Value")
let user = boxedValue.value
println("id: \(user.id) \nname: \(user.name) \nemail: \(user.email)")
case let .Error(error):
println(error)
}
}
}
func getUser(url: NSURL?, callback: (Result<User>) -> ()) {
let request = NSURLRequest(URL: url!)
let session = NSURLSession.sharedSession()
let queue = NSOperationQueue.mainQueue()
var response: AutoreleasingUnsafeMutablePointer<NSURLResponse?> = nil
var error: NSError?
var responseData = NSURLConnection.sendSynchronousRequest(request, returningResponse: response, error: &error) as NSData!
println("getUser task started")
if error != nil {
callback(Result.Error(error!))
return
}
var jsonErrorOpt: NSError?
let jsonOptional: JSON! = NSJSONSerialization.JSONObjectWithData(responseData!, options: NSJSONReadingOptions.MutableContainers, error: &jsonErrorOpt)
if jsonErrorOpt != nil {
callback(Result.Error(jsonErrorOpt!))
return
}
if let json = jsonOptional as? JSONDict {
if let id = json["id"] as AnyObject? as? Int {
if let name = json["name"] as AnyObject? as? String {
if let email = json["email"] as AnyObject? as? String {
let user = User(id: id, name: name, email: email)
callback(.Value(Box(user)))
return
}
}
}
}
// if we couldn't parse all the properties then send back an error
callback(.Error(NSError()))
println("getUser task called")
}
makeRequest()
println("End of execution")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment