Swift Reanude la carga de Alamofire después del time de espera / connection perdida

Estoy usando swift 2.3 y Alamofire con multipartFormData para cargar files de manera asincrónica y no puedo entender si incluso es posible hacer una reanudación después de que me quede un time de espera en mi connection o pierda mi connection y se restablezca en el teléfono.

Lo que quiero es reanudar la carga si falla, por ejemplo: subo un file grande. Llega al 55% cargado, y luego pierdo mi connection a Internet. Cuando recupero la connection a Internet, quiero que la carga continúe desde el 55% en lugar de comenzar desde el 0% nuevamente.

A continuación, el código que utilizo para cargar mis files:

class FileUploadHelper { class func Upload(numberOfTimes: Int, index: Int, command: String, nsData: NSData, fileName: String, mimeType: String, progress: (index: Int, progressPercentage: Int) -> Void, error: (index: Int, fileUploadError : FileUploadError) -> Void, completed: (index: Int, dataFail: Int) -> Void, badConnection: () -> Void) { Alamofire.upload(.POST, ResourceHelper.ServiceBaseUrl + command, multipartFormData: { multipartFormData in multipartFormData.appendBodyPart(data: nsData, name: "test", fileName: fileName, mimeType: mimeType) }, encodingCompletion: { encodingResult in encodingCompleted(numberOfTimes, index: index, command: command, nsData: nsData, fileName: fileName, mimeType: mimeType, encodingResult: encodingResult, progress: progress, error: error, completed: completed, badConnection: badConnection) } ) } class func encodingCompleted( numberOfTimes: Int, index: Int, command: String, nsData: NSData, fileName: String, mimeType: String , encodingResult: Manager.MultipartFormDataEncodingResult, progress: (index: Int, progressPercentage: Int) -> Void, error: (index: Int, fileUploadError : FileUploadError) -> Void, completed: (index: Int, dataFail: Int) -> Void, badConnection: () -> Void) { switch encodingResult { case .Success (let upload, _, _): upload.responseString { response in var out: NSInteger = 0 response.data!.getBytes(&out, length: sizeof(NSInteger)) switch response.result { case .Success: dispatch_async(dispatch_get_main_queue(), { completed(index: index, dataFail: out) }) case .Failure: if (numberOfTimes > 0) { AWBanner.showWithDuration(7, delay: 0, message: NSLocalizedString("Bad Connection - Attempting to upload", comment: ""), backgroundColor: UIColor.networkingColor(), textColor: UIColor.whiteColor(), originY: 40.0) FileUploadHelper.Upload(numberOfTimes - 1, index: index, command: command, nsData: nsData, fileName: fileName,mimeType: mimeType, progress: progress, error: error, completed: completed, badConnection: badConnection) } else { badConnection() } } } upload.progress { bytesWritten, totalBytesWritten, totalBytesExpectedToWrite in dispatch_async(dispatch_get_main_queue(), { progress(index: index, progressPercentage: Int(Double(totalBytesWritten) / Double(totalBytesExpectedToWrite) * 100)) }) } case .Failure(let encodingError): dispatch_async(dispatch_get_main_queue(), { error(index: index, fileUploadError: FileUploadError.Failed(encodingError: encodingError)) }) } } }