func uploadFile() -> Promise { let p = Promise.defer() dispatch_async( dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), { let success = self.actualFileUpload() if !success { p.reject() } dispatch_async(dispatch_get_main_queue(), { p.resolve()() }) }) return p } ... let deferred = Deferred() ... override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading