嵌入函数返回值后在函数中调用completionHandler?迅速
Posted
技术标签:
【中文标题】嵌入函数返回值后在函数中调用completionHandler?迅速【英文标题】:Call completionHandler in function after embedded function returns value? Swift 【发布时间】:2016-09-29 00:37:59 【问题描述】:在包含另一个函数的函数中调用 completionHandler() 的正确方法是什么?基本上,我想等到嵌入函数完成后再调用completionHandler。
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()
【问题讨论】:
将completionHandler()
移动到return nil
上方的行会成功吗?
更好 - 将调用 return nil
替换为调用 completionHandler()
。但是completionHandler
是在哪里定义的?
对不起,上面定义了代码完成处理程序,我只是未能将其复制进去。我看到如果我在 return nil 之前调用 completionHandler,则不会调用 return nil。如果我删除 return 语句,它会引发错误...
【参考方案1】:
我能够解决我自己的问题。以下代码调用完成处理程序并在嵌入函数完成后:
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?迅速的主要内容,如果未能解决你的问题,请参考以下文章