嵌入函数返回值后在函数中调用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?迅速的主要内容,如果未能解决你的问题,请参考以下文章

iOS 怎么在一个函数执行完毕得到某个参数值后再去执行他下边的代码

填充所有值后如何自动调用函数

获取函数和值的函数的名称以及将函数应用于值后的返回值

yield关键字详解与三种用法

丢弃异常值后在 SQL 中取平均值

Firebase 函数在 10 秒后在客户端提供超时