2016-09-29 76 views
0

在包含另一个函数的函数中调用completionHandler()的正确方法是什么?基本上,我想在调用completionHandler之前等待嵌入式函数完成。嵌入函数返回值后,在函数中调用completionHandler? Swift

func somefunc {  

transferManager?.download(downloadRequest).continue({(task: AWSTask) -> AnyObject! in 

    // Your handler code here 
    if (task.error != nil) { 
     print("- Error while downloading!") 
     print(task.error) 
    } 

    else if (task.result != nil) { 
     //let downloadOutput: AWSS3TransferManagerDownloadOutput = task.result as! AWSS3TransferManagerDownloadOutput 
     do { 
      let dFile = try NSString(contentsOf: downloadingFileURL as URL, encoding: String.Encoding.utf8.rawValue) 
      print(dFile) 
      modelsParseCSV(contentsOfURL: downloadingFileURL) 
     } 
     catch { 
      print("- Error: Unable to retrieve contents of csv file") 
     } 
    } 
    else { 
     print("- Uknown error: AWSS3 get file") 
    } 


    print("------------ AWS Get Models File End ----------") 
    return nil 

}) 

completionHandler() 
} 
+1

将'completionHandler()'移动到'return nil'上面的行会做诀窍吗? – dasblinkenlight

+0

更好 - 通过调用'completionHandler()'将调用替换为'return nil'。但是'completionHandler'在哪里定义? – rmaddy

+0

对不起,上面定义了缺少代码完成处理程序,我只是没有复制它。我看到,如果我在返回nil之前调用completionHandler,则不会调用返回nil。如果我删除返回语句,它会引发错误... –

回答

0

我能解决我自己的问题。下面的代码调用完成处理函数,并在嵌入函数完成之后:

func AWS_getModelsFile(AWSMake: String, completionHandler: (() -> Void)!) { 

    ......... 

    transferManager?.download(downloadRequest).continue({(task: AWSTask) -> AnyObject! in 

     // Your handler code here 
     if (task.error != nil) { 
      print("- Error while downloading!") 
      print(task.error) 
     } 

     else if (task.result != nil) { 
      //let downloadOutput: AWSS3TransferManagerDownloadOutput = task.result as! AWSS3TransferManagerDownloadOutput 
      do { 
       let dFile = try NSString(contentsOf: downloadingFileURL as URL, encoding: String.Encoding.utf8.rawValue) 
       print(dFile) 
       modelsParseCSV(contentsOfURL: downloadingFileURL) 
      } 
      catch { 
       print("- Error: Unable to retrieve contents of csv file") 
      } 
     } 
     else { 
      print("- Uknown error: AWSS3 get file") 
     } 


     print("------------ AWS Get Models File End ----------") 
     completionHandler() 
     return nil 

    }) 
}