嵌入函数返回值后,在函数中调用completionHandler? Swift
问题描述:
在包含另一个函数的函数中调用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()
}
答
我能解决我自己的问题。下面的代码调用完成处理函数,并在嵌入函数完成之后:
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
})
}
将'completionHandler()'移动到'return nil'上面的行会做诀窍吗? – dasblinkenlight
更好 - 通过调用'completionHandler()'将调用替换为'return nil'。但是'completionHandler'在哪里定义? – rmaddy
对不起,上面定义了缺少代码完成处理程序,我只是没有复制它。我看到,如果我在返回nil之前调用completionHandler,则不会调用返回nil。如果我删除返回语句,它会引发错误... –